You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2015/10/20 22:55:40 UTC
hbase git commit: HBASE-14628 [0.98] Save object creation for
scanning with block encodings.
Repository: hbase
Updated Branches:
refs/heads/0.98 834035bac -> d5867a4d9
HBASE-14628 [0.98] Save object creation for scanning with block encodings.
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d5867a4d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d5867a4d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d5867a4d
Branch: refs/heads/0.98
Commit: d5867a4d95ba2c795b411bf0537551f476653c49
Parents: 834035b
Author: Lars Hofhansl <la...@apache.org>
Authored: Tue Oct 20 13:55:22 2015 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Tue Oct 20 13:55:22 2015 -0700
----------------------------------------------------------------------
.../io/encoding/BufferedDataBlockEncoder.java | 46 +++++++-------------
.../hbase/io/encoding/DataBlockEncoder.java | 4 --
.../codec/prefixtree/PrefixTreeSeeker.java | 8 ----
.../io/encoding/TestDataBlockEncoders.java | 18 ++++----
4 files changed, 25 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/d5867a4d/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
index 4d1cb91..93f43b3 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java
@@ -222,50 +222,36 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
}
@Override
- public ByteBuffer getKeyValueBuffer() {
- ByteBuffer kvBuffer = createKVBuffer();
- kvBuffer.putInt(current.keyLength);
- kvBuffer.putInt(current.valueLength);
- kvBuffer.put(current.keyBuffer, 0, current.keyLength);
- kvBuffer.put(currentBuffer.array(),
- currentBuffer.arrayOffset() + current.valueOffset,
- current.valueLength);
+ public KeyValue getKeyValue() {
+ byte[] kvBuf = new byte[(int)KeyValue.getKeyValueDataStructureSize(current.keyLength,
+ current.valueLength, current.tagsLength)];
+ int offset = Bytes.putInt(kvBuf, 0, current.keyLength);
+ offset = Bytes.putInt(kvBuf, offset, current.valueLength);
+ System.arraycopy(current.keyBuffer, 0, kvBuf, offset, current.keyLength);
+ offset += current.keyLength;
+ System.arraycopy(currentBuffer.array(),
+ currentBuffer.arrayOffset() + current.valueOffset, kvBuf, offset, current.valueLength);
+ offset += current.valueLength;
if (current.tagsLength > 0) {
// Put short as unsigned
- kvBuffer.put((byte)(current.tagsLength >> 8 & 0xff));
- kvBuffer.put((byte)(current.tagsLength & 0xff));
+ offset = Bytes.putByte(kvBuf, offset, (byte)(current.tagsLength >> 8 & 0xff));
+ offset = Bytes.putByte(kvBuf, offset, (byte)(current.tagsLength & 0xff));
if (current.tagsOffset != -1) {
// the offset of the tags bytes in the underlying buffer is marked. So the temp
// buffer,tagsBuffer was not been used.
- kvBuffer.put(currentBuffer.array(), currentBuffer.arrayOffset() + current.tagsOffset,
- current.tagsLength);
+ System.arraycopy(currentBuffer.array(), currentBuffer.arrayOffset() + current.tagsOffset, kvBuf, offset, current.tagsLength);
} else {
// When tagsOffset is marked as -1, tag compression was present and so the tags were
// uncompressed into temp buffer, tagsBuffer. Let us copy it from there
- kvBuffer.put(current.tagsBuffer, 0, current.tagsLength);
+ System.arraycopy(current.tagsBuffer, 0, kvBuf, offset, current.tagsLength);
}
}
- kvBuffer.rewind();
- return kvBuffer;
- }
- protected ByteBuffer createKVBuffer() {
- int kvBufSize = (int) KeyValue.getKeyValueDataStructureSize(current.keyLength,
- current.valueLength, current.tagsLength);
- ByteBuffer kvBuffer = ByteBuffer.allocate(kvBufSize);
- return kvBuffer;
- }
-
- @Override
- public KeyValue getKeyValue() {
- ByteBuffer kvBuf = getKeyValueBuffer();
KeyValue kv;
if (current.tagsLength == 0) {
- kv = new NoTagsKeyValue(kvBuf.array(), kvBuf.arrayOffset(), kvBuf.array().length
- - kvBuf.arrayOffset());
+ kv = new NoTagsKeyValue(kvBuf, 0, kvBuf.length);
} else {
- kv = new KeyValue(kvBuf.array(), kvBuf.arrayOffset(), kvBuf.array().length
- - kvBuf.arrayOffset());
+ kv = new KeyValue(kvBuf, 0, kvBuf.length);
}
kv.setMvccVersion(current.memstoreTS);
return kv;
http://git-wip-us.apache.org/repos/asf/hbase/blob/d5867a4d/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
index aa859e4..222b5fe 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DataBlockEncoder.java
@@ -139,10 +139,6 @@ public interface DataBlockEncoder {
*/
ByteBuffer getValueShallowCopy();
- // TODO : To be removed - Used only in test cases.
- /** @return key value buffer with the position set to the beginning*/
- ByteBuffer getKeyValueBuffer();
-
/**
* @return the KeyValue object at the current position. Includes memstore
* timestamp.
http://git-wip-us.apache.org/repos/asf/hbase/blob/d5867a4d/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java
----------------------------------------------------------------------
diff --git a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java
index ac12b70..35c24b6 100644
--- a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java
+++ b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java
@@ -84,14 +84,6 @@ public class PrefixTreeSeeker implements EncodedSeeker {
* currently must do deep copy into new array
*/
@Override
- public ByteBuffer getKeyValueBuffer() {
- return KeyValueUtil.copyToNewByteBuffer(ptSearcher.current());
- }
-
- /**
- * currently must do deep copy into new array
- */
- @Override
public KeyValue getKeyValue() {
if (ptSearcher.current() == null) {
return null;
http://git-wip-us.apache.org/repos/asf/hbase/blob/d5867a4d/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
index 748352e..da227be 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.java
@@ -288,27 +288,27 @@ public class TestDataBlockEncoders {
int i = 0;
do {
KeyValue expectedKeyValue = sampleKv.get(i);
- ByteBuffer keyValue = seeker.getKeyValueBuffer();
- if (0 != Bytes.compareTo(keyValue.array(), keyValue.arrayOffset(), keyValue.limit(),
+ KeyValue keyValue = seeker.getKeyValue();
+ if (0 != Bytes.compareTo(keyValue.getBuffer(), keyValue.getOffset(), keyValue.getLength(),
expectedKeyValue.getBuffer(), expectedKeyValue.getOffset(),
expectedKeyValue.getLength())) {
int commonPrefix = 0;
- byte[] left = keyValue.array();
+ byte[] left = keyValue.getBuffer();
byte[] right = expectedKeyValue.getBuffer();
- int leftOff = keyValue.arrayOffset();
+ int leftOff = keyValue.getOffset();
int rightOff = expectedKeyValue.getOffset();
- int length = Math.min(keyValue.limit(), expectedKeyValue.getLength());
+ int length = Math.min(keyValue.getLength(), expectedKeyValue.getLength());
while (commonPrefix < length
&& left[commonPrefix + leftOff] == right[commonPrefix + rightOff]) {
commonPrefix++;
}
fail(String.format("next() produces wrong results "
- + "encoder: %s i: %d commonPrefix: %d" + "\n expected %s\n actual %s", encoder
+ + "encoder: %s i: %d commonPrefix: %d" + "\n expected %s\n actual %s", encoder
.toString(), i, commonPrefix, Bytes.toStringBinary(expectedKeyValue.getBuffer(),
expectedKeyValue.getOffset(), expectedKeyValue.getLength()), Bytes
- .toStringBinary(keyValue)));
+ .toStringBinary(keyValue.getBuffer())));
}
i++;
} while (seeker.next());
@@ -355,7 +355,7 @@ public class TestDataBlockEncoders {
private void checkSeekingConsistency(List<DataBlockEncoder.EncodedSeeker> encodedSeekers,
boolean seekBefore, KeyValue keyValue) {
- ByteBuffer expectedKeyValue = null;
+ KeyValue expectedKeyValue = null;
ByteBuffer expectedKey = null;
ByteBuffer expectedValue = null;
@@ -364,7 +364,7 @@ public class TestDataBlockEncoders {
keyValue.getKeyLength(), seekBefore);
seeker.rewind();
- ByteBuffer actualKeyValue = seeker.getKeyValueBuffer();
+ KeyValue actualKeyValue = seeker.getKeyValue();
ByteBuffer actualKey = seeker.getKeyDeepCopy();
ByteBuffer actualValue = seeker.getValueShallowCopy();
if (expectedKeyValue != null) {