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 buffer Binary array
|
||||||
* @param offset Offset into array at which vint begins.
|
* @param offset Offset into array at which vint begins.
|
||||||
* @throws java.io.IOException e
|
* @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)
|
public static long readVLong(final byte [] buffer, final int offset)
|
||||||
throws IOException {
|
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];
|
byte firstByte = buffer[offset];
|
||||||
int len = WritableUtils.decodeVIntSize(firstByte);
|
int len = WritableUtils.decodeVIntSize(firstByte);
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.Random;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.hadoop.hbase.testclassification.SmallTests;
|
import org.apache.hadoop.hbase.testclassification.SmallTests;
|
||||||
|
import org.apache.hadoop.io.WritableUtils;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
|
|
||||||
|
@ -212,6 +213,19 @@ public class TestBytes extends TestCase {
|
||||||
assertEquals(7, target.limit());
|
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() {
|
public void testToStringBinaryForBytes() {
|
||||||
byte[] array = { '0', '9', 'a', 'z', 'A', 'Z', '@', 1 };
|
byte[] array = { '0', '9', 'a', 'z', 'A', 'Z', '@', 1 };
|
||||||
String actual = Bytes.toStringBinary(array);
|
String actual = Bytes.toStringBinary(array);
|
||||||
|
|
|
@ -938,13 +938,9 @@ public class HFileReaderV2 extends AbstractHFileReader {
|
||||||
protected void readMvccVersion() {
|
protected void readMvccVersion() {
|
||||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||||
if (this.reader.decodeMemstoreTS) {
|
if (this.reader.decodeMemstoreTS) {
|
||||||
try {
|
currMemstoreTS = Bytes.readAsVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||||
currMemstoreTS = Bytes.readVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
+ blockBuffer.position());
|
||||||
+ blockBuffer.position());
|
currMemstoreTSLen = WritableUtils.getVIntSize(currMemstoreTS);
|
||||||
currMemstoreTSLen = WritableUtils.getVIntSize(currMemstoreTS);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
currMemstoreTS = 0;
|
currMemstoreTS = 0;
|
||||||
currMemstoreTSLen = 1;
|
currMemstoreTSLen = 1;
|
||||||
|
@ -982,14 +978,10 @@ public class HFileReaderV2 extends AbstractHFileReader {
|
||||||
blockBuffer.reset();
|
blockBuffer.reset();
|
||||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||||
if (this.reader.decodeMemstoreTS) {
|
if (this.reader.decodeMemstoreTS) {
|
||||||
try {
|
int memstoreTSOffset = blockBuffer.arrayOffset() + blockBuffer.position()
|
||||||
int memstoreTSOffset = blockBuffer.arrayOffset() + blockBuffer.position()
|
+ KEY_VALUE_LEN_SIZE + klen + vlen;
|
||||||
+ KEY_VALUE_LEN_SIZE + klen + vlen;
|
memstoreTS = Bytes.readAsVLong(blockBuffer.array(), memstoreTSOffset);
|
||||||
memstoreTS = Bytes.readVLong(blockBuffer.array(), memstoreTSOffset);
|
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
||||||
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
memstoreTS = 0;
|
memstoreTS = 0;
|
||||||
memstoreTSLen = 1;
|
memstoreTSLen = 1;
|
||||||
|
|
|
@ -275,13 +275,9 @@ public class HFileReaderV3 extends HFileReaderV2 {
|
||||||
}
|
}
|
||||||
if (this.reader.shouldIncludeMemstoreTS()) {
|
if (this.reader.shouldIncludeMemstoreTS()) {
|
||||||
if (this.reader.decodeMemstoreTS) {
|
if (this.reader.decodeMemstoreTS) {
|
||||||
try {
|
memstoreTS = Bytes.readAsVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
||||||
memstoreTS = Bytes.readVLong(blockBuffer.array(), blockBuffer.arrayOffset()
|
+ blockBuffer.position());
|
||||||
+ blockBuffer.position());
|
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
||||||
memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Error reading memstore timestamp", e);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
memstoreTS = 0;
|
memstoreTS = 0;
|
||||||
memstoreTSLen = 1;
|
memstoreTSLen = 1;
|
||||||
|
|
Loading…
Reference in New Issue