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:
Apekshit(Appy) Sharma 2015-04-03 17:23:27 -07:00 committed by Sean Busbey
parent e65f430003
commit 4d8bcd4629
4 changed files with 38 additions and 24 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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;