HBASE-6919 Remove unnecessary throws IOException from Bytes.readVLong.
Added readAsVLong() to deprecate readVLong() which was throwing IOException. Added test for readAsVLong(). Signed-off-by: Sean Busbey <busbey@apache.org> Conflicts: hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
This commit is contained in:
parent
e65f430003
commit
4d8bcd4629
|
@ -1156,14 +1156,26 @@ public class Bytes {
|
|||
}
|
||||
|
||||
/**
|
||||
* Reads a zero-compressed encoded long from input stream and returns it.
|
||||
* Reads a zero-compressed encoded long from input buffer and returns it.
|
||||
* @param buffer Binary array
|
||||
* @param offset Offset into array at which vint begins.
|
||||
* @throws java.io.IOException e
|
||||
* @return deserialized long from stream.
|
||||
* @return deserialized long from buffer.
|
||||
* @deprecated Use {@link #readAsVLong()} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static long readVLong(final byte [] buffer, final int offset)
|
||||
throws IOException {
|
||||
return readAsVLong(buffer, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a zero-compressed encoded long from input buffer and returns it.
|
||||
* @param buffer Binary array
|
||||
* @param offset Offset into array at which vint begins.
|
||||
* @return deserialized long from buffer.
|
||||
*/
|
||||
public static long readAsVLong(final byte [] buffer, final int offset) {
|
||||
byte firstByte = buffer[offset];
|
||||
int len = WritableUtils.decodeVIntSize(firstByte);
|
||||
if (len == 1) {
|
||||
|
|
|
@ -30,6 +30,7 @@ import java.util.Random;
|
|||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.hadoop.hbase.testclassification.SmallTests;
|
||||
import org.apache.hadoop.io.WritableUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.experimental.categories.Category;
|
||||
|
||||
|
@ -212,6 +213,19 @@ public class TestBytes extends TestCase {
|
|||
assertEquals(7, target.limit());
|
||||
}
|
||||
|
||||
public void testReadAsVLong() throws Exception {
|
||||
long [] longs = {-1l, 123l, Long.MIN_VALUE, Long.MAX_VALUE};
|
||||
for (int i = 0; i < longs.length; i++) {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
DataOutputStream output = new DataOutputStream(baos);
|
||||
WritableUtils.writeVLong(output, longs[i]);
|
||||
byte[] long_bytes_no_offset = baos.toByteArray();
|
||||
assertEquals(longs[i], Bytes.readAsVLong(long_bytes_no_offset, 0));
|
||||
byte[] long_bytes_with_offset = bytesWithOffset(long_bytes_no_offset);
|
||||
assertEquals(longs[i], Bytes.readAsVLong(long_bytes_with_offset, 1));
|
||||
}
|
||||
}
|
||||
|
||||
public void testToStringBinaryForBytes() {
|
||||
byte[] array = { '0', '9', 'a', 'z', 'A', 'Z', '@', 1 };
|
||||
String actual = Bytes.toStringBinary(array);
|
||||
|
|
|
@ -938,13 +938,9 @@ public class HFileReaderV2 extends AbstractHFileReader {
|
|||
protected void readMvccVersion() {
|
||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||
if (this.reader.decodeMemstoreTS) {
|
||||
try {
|
||||
currMemstoreTS = Bytes.readVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||
currMemstoreTS = Bytes.readAsVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||
+ blockBuffer.position());
|
||||
currMemstoreTSLen = WritableUtils.getVIntSize(currMemstoreTS);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
||||
}
|
||||
} else {
|
||||
currMemstoreTS = 0;
|
||||
currMemstoreTSLen = 1;
|
||||
|
@ -982,14 +978,10 @@ public class HFileReaderV2 extends AbstractHFileReader {
|
|||
blockBuffer.reset();
|
||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||
if (this.reader.decodeMemstoreTS) {
|
||||
try {
|
||||
int memstoreTSOffset = blockBuffer.arrayOffset() + blockBuffer.position()
|
||||
+ KEY_VALUE_LEN_SIZE + klen + vlen;
|
||||
memstoreTS = Bytes.readVLong(blockBuffer.array(), memstoreTSOffset);
|
||||
memstoreTS = Bytes.readAsVLong(blockBuffer.array(), memstoreTSOffset);
|
||||
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
||||
}
|
||||
} else {
|
||||
memstoreTS = 0;
|
||||
memstoreTSLen = 1;
|
||||
|
|
|
@ -275,13 +275,9 @@ public class HFileReaderV3 extends HFileReaderV2 {
|
|||
}
|
||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||
if (this.reader.decodeMemstoreTS) {
|
||||
try {
|
||||
memstoreTS = Bytes.readVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||
memstoreTS = Bytes.readAsVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||
+ blockBuffer.position());
|
||||
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
||||
}
|
||||
} else {
|
||||
memstoreTS = 0;
|
||||
memstoreTSLen = 1;
|
||||
|
|
Loading…
Reference in New Issue