Bugfix for Hadoop bug in VKmer and PositionList
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index 8de4b0e..f0b2850 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -243,9 +243,10 @@
@Override
public void readFields(DataInput in) throws IOException {
- this.valueCount = in.readInt();
- setSize(valueCount * PositionWritable.LENGTH + HEADER_SIZE);
- in.readFully(storage, offset + HEADER_SIZE, valueCount * PositionWritable.LENGTH);
+ int newValueCount = in.readInt();
+ setSize(newValueCount * PositionWritable.LENGTH + HEADER_SIZE);
+ in.readFully(storage, offset + HEADER_SIZE, newValueCount * PositionWritable.LENGTH);
+ valueCount = newValueCount;
Marshal.putInt(valueCount, storage, offset);
}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index 4f34542..73edd9d 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -362,6 +362,7 @@
}
in.readFully(bytes, kmerStartOffset, bytesUsed);
}
+ saveHeader(lettersInKmer);
}
/**
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java
index abd46ef..9895406 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java
@@ -247,13 +247,12 @@
@Override
public void readFields(DataInput in) throws IOException {
reset();
- valueCount = in.readInt();
- Marshal.putInt(valueCount, storage, offset);
+ int newValueCount = in.readInt();
int curOffset = offset + HEADER_SIZE;
int elemBytes = 0;
int elemLetters = 0;
int curLength = getLength();
- for (int i = 0; i < valueCount; i++) {
+ for (int i = 0; i < newValueCount; i++) {
elemLetters = in.readInt();
elemBytes = KmerUtil.getByteNumFromK(elemLetters) + VKmerBytesWritable.HEADER_SIZE;
setSize(curLength + elemBytes); // make sure we have room for the new element
@@ -262,6 +261,8 @@
curOffset += elemBytes;
curLength += elemBytes;
}
+ valueCount = newValueCount;
+ Marshal.putInt(valueCount, storage, offset);
}
@Override