You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by an...@apache.org on 2014/10/22 19:03:51 UTC
git commit: HBASE-12288 Support DirectByteBuffer usage in DataBlock
Encoding area.
Repository: hbase
Updated Branches:
refs/heads/master deaba7814 -> d70e2b124
HBASE-12288 Support DirectByteBuffer usage in DataBlock Encoding area.
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d70e2b12
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d70e2b12
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d70e2b12
Branch: refs/heads/master
Commit: d70e2b12441e7b0a45d2d026be568315c4e4cd88
Parents: deaba78
Author: anoopsjohn <an...@gmail.com>
Authored: Wed Oct 22 22:33:11 2014 +0530
Committer: anoopsjohn <an...@gmail.com>
Committed: Wed Oct 22 22:33:11 2014 +0530
----------------------------------------------------------------------
.../io/encoding/BufferedDataBlockEncoder.java | 31 +++++++++-----------
.../io/encoding/CopyKeyDataBlockEncoder.java | 9 +++---
.../hbase/io/encoding/DiffKeyDeltaEncoder.java | 1 +
.../hbase/io/encoding/FastDiffDeltaEncoder.java | 6 ++--
.../io/encoding/PrefixKeyDeltaEncoder.java | 6 ++--
.../hadoop/hbase/util/ByteBufferUtils.java | 5 +++-
6 files changed, 32 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/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 a06e0ac..be8c192 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
@@ -137,7 +137,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
}
}
- protected void createKeyOnlyKeyValue(byte[] keyBuffer, long memTS) {
+ protected void setKey(byte[] keyBuffer, long memTS) {
currentKey.setKey(keyBuffer, 0, keyLength);
memstoreTS = memTS;
}
@@ -302,11 +302,8 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
@Override
public String toString() {
- KeyValue kv = KeyValueUtil.copyToNewKeyValue(this);
- if (kv == null) {
- return "null";
- }
- return kv.toString();
+ return KeyValue.keyToString(this.keyBuffer, 0, KeyValueUtil.keyLength(this)) + "/vlen="
+ + getValueLength() + "/seqid=" + memstoreTS;
}
public Cell shallowCopy() {
@@ -575,7 +572,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
current.tagCompressionContext = tagCompressionContext;
}
decodeFirst();
- current.createKeyOnlyKeyValue(current.keyBuffer, current.memstoreTS);
+ current.setKey(current.keyBuffer, current.memstoreTS);
previous.invalidate();
}
@@ -588,9 +585,10 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
@Override
public ByteBuffer getValueShallowCopy() {
- return ByteBuffer.wrap(currentBuffer.array(),
- currentBuffer.arrayOffset() + current.valueOffset,
- current.valueLength);
+ ByteBuffer dup = currentBuffer.duplicate();
+ dup.position(current.valueOffset);
+ dup.limit(current.valueOffset + current.valueLength);
+ return dup.slice();
}
@Override
@@ -599,8 +597,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
kvBuffer.putInt(current.keyLength);
kvBuffer.putInt(current.valueLength);
kvBuffer.put(current.keyBuffer, 0, current.keyLength);
- kvBuffer.put(currentBuffer.array(),
- currentBuffer.arrayOffset() + current.valueOffset,
+ ByteBufferUtils.copyFromBufferToBuffer(kvBuffer, currentBuffer, current.valueOffset,
current.valueLength);
if (current.tagsLength > 0) {
// Put short as unsigned
@@ -609,7 +606,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
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,
+ ByteBufferUtils.copyFromBufferToBuffer(kvBuffer, currentBuffer, current.tagsOffset,
current.tagsLength);
} else {
// When tagsOffset is marked as -1, tag compression was present and so the tags were
@@ -639,7 +636,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
tagCompressionContext.clear();
}
decodeFirst();
- current.createKeyOnlyKeyValue(current.keyBuffer, current.memstoreTS);
+ current.setKey(current.keyBuffer, current.memstoreTS);
previous.invalidate();
}
@@ -649,7 +646,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
return false;
}
decodeNext();
- current.createKeyOnlyKeyValue(current.keyBuffer, current.memstoreTS);
+ current.setKey(current.keyBuffer, current.memstoreTS);
previous.invalidate();
return true;
}
@@ -672,7 +669,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
}
current.tagsOffset = -1;
} else {
- // When tag compress is not used, let us not do temp copying of tags bytes into tagsBuffer.
+ // When tag compress is not used, let us not do copying of tags bytes into tagsBuffer.
// Just mark the tags Offset so as to create the KV buffer later in getKeyValueBuffer()
current.tagsOffset = currentBuffer.position();
ByteBufferUtils.skip(currentBuffer, current.tagsLength);
@@ -783,7 +780,7 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder {
if (currentBuffer.hasRemaining()) {
previous.copyFromNext(current);
decodeNext();
- current.createKeyOnlyKeyValue(current.keyBuffer, current.memstoreTS);
+ current.setKey(current.keyBuffer, current.memstoreTS);
} else {
break;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java
index b26b486..6b87c77 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/CopyKeyDataBlockEncoder.java
@@ -68,11 +68,13 @@ public class CopyKeyDataBlockEncoder extends BufferedDataBlockEncoder {
@Override
public ByteBuffer getFirstKeyInBlock(ByteBuffer block) {
int keyLength = block.getInt(Bytes.SIZEOF_INT);
- return ByteBuffer.wrap(block.array(),
- block.arrayOffset() + 3 * Bytes.SIZEOF_INT, keyLength).slice();
+ ByteBuffer dup = block.duplicate();
+ int pos = 3 * Bytes.SIZEOF_INT;
+ dup.position(pos);
+ dup.limit(pos + keyLength);
+ return dup.slice();
}
-
@Override
public String toString() {
return CopyKeyDataBlockEncoder.class.getSimpleName();
@@ -123,5 +125,4 @@ public class CopyKeyDataBlockEncoder extends BufferedDataBlockEncoder {
return buffer;
}
-
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java
index 5aa2373..4182dc4 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/DiffKeyDeltaEncoder.java
@@ -317,6 +317,7 @@ public class DiffKeyDeltaEncoder extends BufferedDataBlockEncoder {
ByteBuffer result = ByteBuffer.allocate(keyLength);
// copy row
+ assert !(result.isDirect());
int pos = result.arrayOffset();
block.get(result.array(), pos, Bytes.SIZEOF_SHORT);
pos += Bytes.SIZEOF_SHORT;
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java
index 5bff66a..a6f43d0 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/FastDiffDeltaEncoder.java
@@ -362,8 +362,10 @@ public class FastDiffDeltaEncoder extends BufferedDataBlockEncoder {
ByteBufferUtils.readCompressedInt(block); // commonLength
int pos = block.position();
block.reset();
- return ByteBuffer.wrap(block.array(), block.arrayOffset() + pos, keyLength)
- .slice();
+ ByteBuffer dup = block.duplicate();
+ dup.position(pos);
+ dup.limit(pos + keyLength);
+ return dup.slice();
}
@Override
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java
index 51746ac..0286eca 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/PrefixKeyDeltaEncoder.java
@@ -184,8 +184,10 @@ public class PrefixKeyDeltaEncoder extends BufferedDataBlockEncoder {
}
int pos = block.position();
block.reset();
- return ByteBuffer.wrap(block.array(), block.arrayOffset() + pos, keyLength)
- .slice();
+ ByteBuffer dup = block.duplicate();
+ dup.position(pos);
+ dup.limit(pos + keyLength);
+ return dup.slice();
}
@Override
http://git-wip-us.apache.org/repos/asf/hbase/blob/d70e2b12/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferUtils.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferUtils.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferUtils.java
index 1cbee83..9451542 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferUtils.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ByteBufferUtils.java
@@ -331,7 +331,10 @@ public final class ByteBufferUtils {
}
/**
- * Copy from one buffer to another from given offset
+ * Copy from one buffer to another from given offset.
+ * <p>
+ * Note : This will advance the position marker of {@code out} but not change the position maker
+ * for {@code in}
* @param out destination buffer
* @param in source buffer
* @param sourceOffset offset in the source buffer