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 2017/02/17 12:21:03 UTC
[2/2] hbase git commit: HBASE-17644 Always create ByteBufferCells
after copying to MSLAB.
HBASE-17644 Always create ByteBufferCells after copying to MSLAB.
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7763dd66
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7763dd66
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7763dd66
Branch: refs/heads/master
Commit: 7763dd6688254d37ad611f5d290db47c83cf93d3
Parents: 3fc2889f
Author: anoopsamjohn <an...@gmail.com>
Authored: Fri Feb 17 17:50:41 2017 +0530
Committer: anoopsamjohn <an...@gmail.com>
Committed: Fri Feb 17 17:50:41 2017 +0530
----------------------------------------------------------------------
.../apache/hadoop/hbase/ByteBufferKeyValue.java | 348 +++++++++++++++++++
.../org/apache/hadoop/hbase/ByteBufferTag.java | 83 +++++
.../java/org/apache/hadoop/hbase/CellUtil.java | 26 +-
.../hadoop/hbase/NoTagsByteBufferKeyValue.java | 62 ++++
.../apache/hadoop/hbase/OffheapKeyValue.java | 340 ------------------
.../org/apache/hadoop/hbase/OffheapTag.java | 83 -----
.../java/org/apache/hadoop/hbase/TagUtil.java | 2 +-
.../hadoop/hbase/codec/KeyValueCodec.java | 4 +-
.../hbase/codec/KeyValueCodecWithTags.java | 4 +-
.../hbase/io/encoding/RowIndexSeekerV1.java | 4 +-
.../hbase/util/test/RedundantKVGenerator.java | 8 +-
.../hadoop/hbase/TestByteBufferKeyValue.java | 198 +++++++++++
.../hadoop/hbase/TestOffheapKeyValue.java | 198 -----------
.../hbase/io/TestTagCompressionContext.java | 4 +-
.../hadoop/hbase/io/hfile/HFileReaderImpl.java | 4 +-
.../hbase/coprocessor/SimpleRegionObserver.java | 36 +-
.../hbase/filter/TestDependentColumnFilter.java | 2 +-
.../io/hfile/TestScannerFromBucketCache.java | 18 +-
.../hadoop/hbase/io/hfile/TestSeekTo.java | 4 +-
.../hadoop/hbase/protobuf/TestProtobufUtil.java | 4 +-
.../regionserver/TestMemStoreChunkPool.java | 8 +-
.../hbase/regionserver/TestMemStoreLAB.java | 20 +-
.../hadoop/hbase/regionserver/TestTags.java | 14 +-
.../wal/TestWALCellCodecWithCompression.java | 6 +-
.../ExpAsStringVisibilityLabelServiceImpl.java | 4 +-
.../hbase/wal/TestWALReaderOnSecureWAL.java | 4 +-
26 files changed, 777 insertions(+), 711 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferKeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferKeyValue.java
new file mode 100644
index 0000000..43d9227
--- /dev/null
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferKeyValue.java
@@ -0,0 +1,348 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.util.ByteBufferUtils;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.ClassSize;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * This Cell is an implementation of {@link ByteBufferCell} where the data resides in
+ * off heap/ on heap ByteBuffer
+ */
+@InterfaceAudience.Private
+public class ByteBufferKeyValue extends ByteBufferCell implements ExtendedCell {
+
+ protected final ByteBuffer buf;
+ protected final int offset;
+ protected final int length;
+ private long seqId = 0;
+
+ private static final int FIXED_OVERHEAD = ClassSize.OBJECT + ClassSize.REFERENCE
+ + (2 * Bytes.SIZEOF_INT) + Bytes.SIZEOF_LONG;
+
+ public ByteBufferKeyValue(ByteBuffer buf, int offset, int length, long seqId) {
+ this.buf = buf;
+ this.offset = offset;
+ this.length = length;
+ this.seqId = seqId;
+ }
+
+ public ByteBufferKeyValue(ByteBuffer buf, int offset, int length) {
+ this.buf = buf;
+ this.offset = offset;
+ this.length = length;
+ }
+
+ @VisibleForTesting
+ public ByteBuffer getBuffer() {
+ return this.buf;
+ }
+
+ @VisibleForTesting
+ public int getOffset() {
+ return this.offset;
+ }
+
+ @Override
+ public byte[] getRowArray() {
+ return CellUtil.cloneRow(this);
+ }
+
+ @Override
+ public int getRowOffset() {
+ return 0;
+ }
+
+ @Override
+ public short getRowLength() {
+ return getRowLen();
+ }
+
+ private short getRowLen() {
+ return ByteBufferUtils.toShort(this.buf, this.offset + KeyValue.ROW_OFFSET);
+ }
+
+ @Override
+ public byte[] getFamilyArray() {
+ return CellUtil.cloneFamily(this);
+ }
+
+ @Override
+ public int getFamilyOffset() {
+ return 0;
+ }
+
+ @Override
+ public byte getFamilyLength() {
+ return getFamilyLength(getFamilyLengthPosition());
+ }
+
+ private int getFamilyLengthPosition() {
+ return this.offset + KeyValue.ROW_KEY_OFFSET
+ + getRowLen();
+ }
+
+ private byte getFamilyLength(int famLenPos) {
+ return ByteBufferUtils.toByte(this.buf, famLenPos);
+ }
+
+ @Override
+ public byte[] getQualifierArray() {
+ return CellUtil.cloneQualifier(this);
+ }
+
+ @Override
+ public int getQualifierOffset() {
+ return 0;
+ }
+
+ @Override
+ public int getQualifierLength() {
+ return getQualifierLength(getRowLength(), getFamilyLength());
+ }
+
+ private int getQualifierLength(int rlength, int flength) {
+ return getKeyLen()
+ - (int) KeyValue.getKeyDataStructureSize(rlength, flength, 0);
+ }
+
+ @Override
+ public long getTimestamp() {
+ int offset = getTimestampOffset(getKeyLen());
+ return ByteBufferUtils.toLong(this.buf, offset);
+ }
+
+ private int getKeyLen() {
+ return ByteBufferUtils.toInt(this.buf, this.offset);
+ }
+
+ private int getTimestampOffset(int keyLen) {
+ return this.offset + KeyValue.ROW_OFFSET + keyLen - KeyValue.TIMESTAMP_TYPE_SIZE;
+ }
+
+ @Override
+ public byte getTypeByte() {
+ return ByteBufferUtils.toByte(this.buf,
+ this.offset + getKeyLen() - 1 + KeyValue.ROW_OFFSET);
+ }
+
+ @Override
+ public long getSequenceId() {
+ return this.seqId;
+ }
+
+ public void setSequenceId(long seqId) {
+ this.seqId = seqId;
+ }
+
+ @Override
+ public byte[] getValueArray() {
+ return CellUtil.cloneValue(this);
+ }
+
+ @Override
+ public int getValueOffset() {
+ return 0;
+ }
+
+ @Override
+ public int getValueLength() {
+ return ByteBufferUtils.toInt(this.buf, this.offset + Bytes.SIZEOF_INT);
+ }
+
+ @Override
+ public byte[] getTagsArray() {
+ return CellUtil.cloneTags(this);
+ }
+
+ @Override
+ public int getTagsOffset() {
+ return 0;
+ }
+
+ @Override
+ public int getTagsLength() {
+ int tagsLen = this.length - (getKeyLen() + getValueLength()
+ + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE);
+ if (tagsLen > 0) {
+ // There are some Tag bytes in the byte[]. So reduce 2 bytes which is
+ // added to denote the tags
+ // length
+ tagsLen -= KeyValue.TAGS_LENGTH_SIZE;
+ }
+ return tagsLen;
+ }
+
+ @Override
+ public ByteBuffer getRowByteBuffer() {
+ return this.buf;
+ }
+
+ @Override
+ public int getRowPosition() {
+ return this.offset + KeyValue.ROW_KEY_OFFSET;
+ }
+
+ @Override
+ public ByteBuffer getFamilyByteBuffer() {
+ return this.buf;
+ }
+
+ @Override
+ public int getFamilyPosition() {
+ return getFamilyLengthPosition() + Bytes.SIZEOF_BYTE;
+ }
+
+ @Override
+ public ByteBuffer getQualifierByteBuffer() {
+ return this.buf;
+ }
+
+ @Override
+ public int getQualifierPosition() {
+ return getFamilyPosition() + getFamilyLength();
+ }
+
+ @Override
+ public ByteBuffer getValueByteBuffer() {
+ return this.buf;
+ }
+
+ @Override
+ public int getValuePosition() {
+ return this.offset + KeyValue.ROW_OFFSET + getKeyLen();
+ }
+
+ @Override
+ public ByteBuffer getTagsByteBuffer() {
+ return this.buf;
+ }
+
+ @Override
+ public int getTagsPosition() {
+ int tagsLen = getTagsLength();
+ if (tagsLen == 0) {
+ return this.offset + this.length;
+ }
+ return this.offset + this.length - tagsLen;
+ }
+
+ @Override
+ public long heapSize() {
+ return ClassSize.align(FIXED_OVERHEAD + ClassSize.align(length));
+ }
+
+ @Override
+ public int write(OutputStream out, boolean withTags) throws IOException {
+ int length = getSerializedSize(withTags);
+ ByteBufferUtils.copyBufferToStream(out, this.buf, this.offset, length);
+ return length;
+ }
+
+ @Override
+ public int getSerializedSize(boolean withTags) {
+ if (withTags) {
+ return this.length;
+ }
+ return getKeyLen() + this.getValueLength()
+ + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE;
+ }
+
+ @Override
+ public void write(ByteBuffer buf, int offset) {
+ ByteBufferUtils.copyFromBufferToBuffer(this.buf, buf, this.offset, offset, this.length);
+ }
+
+ @Override
+ public String toString() {
+ return CellUtil.toString(this, true);
+ }
+
+ @Override
+ public void setTimestamp(long ts) throws IOException {
+ ByteBufferUtils.copyFromArrayToBuffer(this.buf, this.getTimestampOffset(), Bytes.toBytes(ts), 0,
+ Bytes.SIZEOF_LONG);
+ }
+
+ private int getTimestampOffset() {
+ return this.offset + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE
+ + getKeyLen() - KeyValue.TIMESTAMP_TYPE_SIZE;
+ }
+
+ @Override
+ public void setTimestamp(byte[] ts, int tsOffset) throws IOException {
+ ByteBufferUtils.copyFromArrayToBuffer(this.buf, this.getTimestampOffset(), ts, tsOffset,
+ Bytes.SIZEOF_LONG);
+ }
+
+ @Override
+ public long heapOverhead() {
+ return FIXED_OVERHEAD;
+ }
+
+ @Override
+ public Cell deepClone() {
+ byte[] copy = new byte[this.length];
+ ByteBufferUtils.copyFromBufferToArray(copy, this.buf, this.offset, 0, this.length);
+ KeyValue kv = new KeyValue(copy, 0, copy.length);
+ kv.setSequenceId(this.getSequenceId());
+ return kv;
+ }
+
+ /**
+ * Needed doing 'contains' on List. Only compares the key portion, not the value.
+ */
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof Cell)) {
+ return false;
+ }
+ return CellUtil.equals(this, (Cell) other);
+ }
+
+ /**
+ * In line with {@link #equals(Object)}, only uses the key portion, not the value.
+ */
+ @Override
+ public int hashCode() {
+ return calculateHashForKey(this);
+ }
+
+ private int calculateHashForKey(ByteBufferCell cell) {
+ int rowHash = ByteBufferUtils.hashCode(cell.getRowByteBuffer(), cell.getRowPosition(),
+ cell.getRowLength());
+ int familyHash = ByteBufferUtils.hashCode(cell.getFamilyByteBuffer(), cell.getFamilyPosition(),
+ cell.getFamilyLength());
+ int qualifierHash = ByteBufferUtils.hashCode(cell.getQualifierByteBuffer(),
+ cell.getQualifierPosition(), cell.getQualifierLength());
+
+ int hash = 31 * rowHash + familyHash;
+ hash = 31 * hash + qualifierHash;
+ hash = 31 * hash + (int) cell.getTimestamp();
+ hash = 31 * hash + cell.getTypeByte();
+ return hash;
+ }
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferTag.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferTag.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferTag.java
new file mode 100644
index 0000000..a212d2f
--- /dev/null
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferTag.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.classification.InterfaceStability;
+import org.apache.hadoop.hbase.util.ByteBufferUtils;
+
+/**
+ * This is a {@link Tag} implementation in which value is backed by
+ * {@link java.nio.ByteBuffer}
+ */
+@InterfaceAudience.Private
+@InterfaceStability.Evolving
+public class ByteBufferTag implements Tag {
+
+ private ByteBuffer buffer;
+ private int offset, length;
+ private byte type;
+
+ public ByteBufferTag(ByteBuffer buffer, int offset, int length) {
+ this.buffer = buffer;
+ this.offset = offset;
+ this.length = length;
+ this.type = ByteBufferUtils.toByte(buffer, offset + TAG_LENGTH_SIZE);
+ }
+
+ @Override
+ public byte getType() {
+ return this.type;
+ }
+
+ @Override
+ public int getValueOffset() {
+ return this.offset + INFRASTRUCTURE_SIZE;
+ }
+
+ @Override
+ public int getValueLength() {
+ return this.length - INFRASTRUCTURE_SIZE;
+ }
+
+ @Override
+ public boolean hasArray() {
+ return false;
+ }
+
+ @Override
+ public byte[] getValueArray() {
+ throw new UnsupportedOperationException(
+ "Tag is backed by an off heap buffer. Use getValueByteBuffer()");
+ }
+
+ @Override
+ public ByteBuffer getValueByteBuffer() {
+ return this.buffer;
+ }
+
+ @Override
+ public String toString() {
+ return "[Tag type : " + this.type + ", value : "
+ + ByteBufferUtils.toStringBinary(buffer, getValueOffset(), getValueLength()) + "]";
+ }
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
index 986a026..1dab10c 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
@@ -1539,7 +1539,7 @@ public final class CellUtil {
public Tag next() {
if (hasNext()) {
int curTagLen = ByteBufferUtils.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);
- Tag tag = new OffheapTag(tags, pos, curTagLen + Tag.TAG_LENGTH_SIZE);
+ Tag tag = new ByteBufferTag(tags, pos, curTagLen + Tag.TAG_LENGTH_SIZE);
this.pos += Bytes.SIZEOF_SHORT + curTagLen;
return tag;
}
@@ -1622,7 +1622,7 @@ public final class CellUtil {
ByteBuffer tagsBuffer = ((ByteBufferCell)cell).getTagsByteBuffer();
tagLen = ByteBufferUtils.readAsInt(tagsBuffer, pos, TAG_LENGTH_SIZE);
if (ByteBufferUtils.toByte(tagsBuffer, pos + TAG_LENGTH_SIZE) == type) {
- return new OffheapTag(tagsBuffer, pos, tagLen + TAG_LENGTH_SIZE);
+ return new ByteBufferTag(tagsBuffer, pos, tagLen + TAG_LENGTH_SIZE);
}
} else {
tagLen = Bytes.readAsInt(cell.getTagsArray(), pos, TAG_LENGTH_SIZE);
@@ -3188,20 +3188,14 @@ public final class CellUtil {
// serialization format only.
KeyValueUtil.appendTo(cell, buf, offset, true);
}
- if (buf.hasArray()) {
- KeyValue newKv;
- if (tagsLen == 0) {
- // When tagsLen is 0, make a NoTagsKeyValue version of Cell. This is an optimized class
- // which directly return tagsLen as 0. So we avoid parsing many length components in
- // reading the tagLength stored in the backing buffer. The Memstore addition of every Cell
- // call getTagsLength().
- newKv = new NoTagsKeyValue(buf.array(), buf.arrayOffset() + offset, len);
- } else {
- newKv = new KeyValue(buf.array(), buf.arrayOffset() + offset, len);
- }
- newKv.setSequenceId(cell.getSequenceId());
- return newKv;
+ if (tagsLen == 0) {
+ // When tagsLen is 0, make a NoTagsByteBufferKeyValue version. This is an optimized class
+ // which directly return tagsLen as 0. So we avoid parsing many length components in
+ // reading the tagLength stored in the backing buffer. The Memstore addition of every Cell
+ // call getTagsLength().
+ return new NoTagsByteBufferKeyValue(buf, offset, len, cell.getSequenceId());
+ } else {
+ return new ByteBufferKeyValue(buf, offset, len, cell.getSequenceId());
}
- return new OffheapKeyValue(buf, offset, len, cell.getSequenceId());
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.java
new file mode 100644
index 0000000..5f2dbc8
--- /dev/null
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/NoTagsByteBufferKeyValue.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.util.ByteBufferUtils;
+
+/**
+ * An extension of the ByteBufferKeyValue where the tags length is always 0
+ */
+@InterfaceAudience.Private
+public class NoTagsByteBufferKeyValue extends ByteBufferKeyValue {
+
+ public NoTagsByteBufferKeyValue(ByteBuffer buf, int offset, int length) {
+ super(buf, offset, length);
+ }
+
+ public NoTagsByteBufferKeyValue(ByteBuffer buf, int offset, int length, long seqId) {
+ super(buf, offset, length, seqId);
+ }
+
+ @Override
+ public byte[] getTagsArray() {
+ return HConstants.EMPTY_BYTE_ARRAY;
+ }
+
+ @Override
+ public int getTagsLength() {
+ return 0;
+ }
+
+ @Override
+ public int getSerializedSize(boolean withTags) {
+ return this.length;
+ }
+
+ @Override
+ public Cell deepClone() {
+ byte[] copy = new byte[this.length];
+ ByteBufferUtils.copyFromBufferToArray(copy, this.buf, this.offset, 0, this.length);
+ KeyValue kv = new NoTagsKeyValue(copy, 0, copy.length);
+ kv.setSequenceId(this.getSequenceId());
+ return kv;
+ }
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java
deleted file mode 100644
index 1bc9549..0000000
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.util.ByteBufferUtils;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.ClassSize;
-
-/**
- * This Cell is an implementation of {@link ByteBufferCell} where the data resides in off heap
- * memory.
- */
-@InterfaceAudience.Private
-public class OffheapKeyValue extends ByteBufferCell implements ExtendedCell {
-
- protected final ByteBuffer buf;
- protected final int offset;
- protected final int length;
- private long seqId = 0;
- // TODO : See if famLen can be cached or not?
-
- private static final int FIXED_OVERHEAD = ClassSize.OBJECT + ClassSize.REFERENCE
- + (3 * Bytes.SIZEOF_INT) + Bytes.SIZEOF_SHORT
- + Bytes.SIZEOF_BOOLEAN + Bytes.SIZEOF_LONG;
-
- public OffheapKeyValue(ByteBuffer buf, int offset, int length, long seqId) {
- assert buf.isDirect();
- this.buf = buf;
- this.offset = offset;
- this.length = length;
- this.seqId = seqId;
- }
-
- public OffheapKeyValue(ByteBuffer buf, int offset, int length) {
- assert buf.isDirect();
- this.buf = buf;
- this.offset = offset;
- this.length = length;
- }
-
- @Override
- public byte[] getRowArray() {
- return CellUtil.cloneRow(this);
- }
-
- @Override
- public int getRowOffset() {
- return 0;
- }
-
- @Override
- public short getRowLength() {
- return getRowLen();
- }
-
- private short getRowLen() {
- return ByteBufferUtils.toShort(this.buf, this.offset + KeyValue.ROW_OFFSET);
- }
-
- @Override
- public byte[] getFamilyArray() {
- return CellUtil.cloneFamily(this);
- }
-
- @Override
- public int getFamilyOffset() {
- return 0;
- }
-
- @Override
- public byte getFamilyLength() {
- return getFamilyLength(getFamilyLengthPosition());
- }
-
- private int getFamilyLengthPosition() {
- return this.offset + KeyValue.ROW_KEY_OFFSET
- + getRowLen();
- }
-
- private byte getFamilyLength(int famLenPos) {
- return ByteBufferUtils.toByte(this.buf, famLenPos);
- }
-
- @Override
- public byte[] getQualifierArray() {
- return CellUtil.cloneQualifier(this);
- }
-
- @Override
- public int getQualifierOffset() {
- return 0;
- }
-
- @Override
- public int getQualifierLength() {
- return getQualifierLength(getRowLength(), getFamilyLength());
- }
-
- private int getQualifierLength(int rlength, int flength) {
- return getKeyLen()
- - (int) KeyValue.getKeyDataStructureSize(rlength, flength, 0);
- }
-
- @Override
- public long getTimestamp() {
- int offset = getTimestampOffset(getKeyLen());
- return ByteBufferUtils.toLong(this.buf, offset);
- }
-
- private int getKeyLen() {
- return ByteBufferUtils.toInt(this.buf, this.offset);
- }
-
- private int getTimestampOffset(int keyLen) {
- return this.offset + KeyValue.ROW_OFFSET + keyLen - KeyValue.TIMESTAMP_TYPE_SIZE;
- }
-
- @Override
- public byte getTypeByte() {
- return ByteBufferUtils.toByte(this.buf,
- this.offset + getKeyLen() - 1 + KeyValue.ROW_OFFSET);
- }
-
- @Override
- public long getSequenceId() {
- return this.seqId;
- }
-
- public void setSequenceId(long seqId) {
- this.seqId = seqId;
- }
-
- @Override
- public byte[] getValueArray() {
- return CellUtil.cloneValue(this);
- }
-
- @Override
- public int getValueOffset() {
- return 0;
- }
-
- @Override
- public int getValueLength() {
- return ByteBufferUtils.toInt(this.buf, this.offset + Bytes.SIZEOF_INT);
- }
-
- @Override
- public byte[] getTagsArray() {
- return CellUtil.cloneTags(this);
- }
-
- @Override
- public int getTagsOffset() {
- return 0;
- }
-
- @Override
- public int getTagsLength() {
- int tagsLen = this.length - (getKeyLen() + getValueLength()
- + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE);
- if (tagsLen > 0) {
- // There are some Tag bytes in the byte[]. So reduce 2 bytes which is
- // added to denote the tags
- // length
- tagsLen -= KeyValue.TAGS_LENGTH_SIZE;
- }
- return tagsLen;
- }
-
- @Override
- public ByteBuffer getRowByteBuffer() {
- return this.buf;
- }
-
- @Override
- public int getRowPosition() {
- return this.offset + KeyValue.ROW_KEY_OFFSET;
- }
-
- @Override
- public ByteBuffer getFamilyByteBuffer() {
- return this.buf;
- }
-
- @Override
- public int getFamilyPosition() {
- return getFamilyLengthPosition() + Bytes.SIZEOF_BYTE;
- }
-
- @Override
- public ByteBuffer getQualifierByteBuffer() {
- return this.buf;
- }
-
- @Override
- public int getQualifierPosition() {
- return getFamilyPosition() + getFamilyLength();
- }
-
- @Override
- public ByteBuffer getValueByteBuffer() {
- return this.buf;
- }
-
- @Override
- public int getValuePosition() {
- return this.offset + KeyValue.ROW_OFFSET + getKeyLen();
- }
-
- @Override
- public ByteBuffer getTagsByteBuffer() {
- return this.buf;
- }
-
- @Override
- public int getTagsPosition() {
- int tagsLen = getTagsLength();
- if (tagsLen == 0) {
- return this.offset + this.length;
- }
- return this.offset + this.length - tagsLen;
- }
-
- @Override
- public long heapSize() {
- return ClassSize.align(FIXED_OVERHEAD + ClassSize.align(length));
- }
-
- @Override
- public int write(OutputStream out, boolean withTags) throws IOException {
- int length = getSerializedSize(withTags);
- ByteBufferUtils.copyBufferToStream(out, this.buf, this.offset, length);
- return length;
- }
-
- @Override
- public int getSerializedSize(boolean withTags) {
- if (withTags) {
- return this.length;
- }
- return getKeyLen() + this.getValueLength()
- + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE;
- }
-
- @Override
- public void write(ByteBuffer buf, int offset) {
- ByteBufferUtils.copyFromBufferToBuffer(this.buf, buf, this.offset, offset, this.length);
- }
-
- @Override
- public String toString() {
- return CellUtil.toString(this, true);
- }
-
- @Override
- public void setTimestamp(long ts) throws IOException {
- ByteBufferUtils.copyFromArrayToBuffer(this.buf, this.getTimestampOffset(), Bytes.toBytes(ts), 0,
- Bytes.SIZEOF_LONG);
- }
-
- private int getTimestampOffset() {
- return this.offset + KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE
- + getKeyLen() - KeyValue.TIMESTAMP_TYPE_SIZE;
- }
-
- @Override
- public void setTimestamp(byte[] ts, int tsOffset) throws IOException {
- ByteBufferUtils.copyFromArrayToBuffer(this.buf, this.getTimestampOffset(), ts, tsOffset,
- Bytes.SIZEOF_LONG);
- }
-
- @Override
- public long heapOverhead() {
- return FIXED_OVERHEAD;
- }
-
- @Override
- public Cell deepClone() {
- byte[] copy = new byte[this.length];
- ByteBufferUtils.copyFromBufferToArray(copy, this.buf, this.offset, 0, this.length);
- KeyValue kv = new KeyValue(copy, 0, copy.length);
- kv.setSequenceId(this.getSequenceId());
- return kv;
- }
-
- /**
- * Needed doing 'contains' on List. Only compares the key portion, not the value.
- */
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof Cell)) {
- return false;
- }
- return CellUtil.equals(this, (Cell) other);
- }
-
- /**
- * In line with {@link #equals(Object)}, only uses the key portion, not the value.
- */
- @Override
- public int hashCode() {
- return calculateHashForKey(this);
- }
-
- private int calculateHashForKey(ByteBufferCell cell) {
- int rowHash = ByteBufferUtils.hashCode(cell.getRowByteBuffer(), cell.getRowPosition(),
- cell.getRowLength());
- int familyHash = ByteBufferUtils.hashCode(cell.getFamilyByteBuffer(), cell.getFamilyPosition(),
- cell.getFamilyLength());
- int qualifierHash = ByteBufferUtils.hashCode(cell.getQualifierByteBuffer(),
- cell.getQualifierPosition(), cell.getQualifierLength());
-
- int hash = 31 * rowHash + familyHash;
- hash = 31 * hash + qualifierHash;
- hash = 31 * hash + (int) cell.getTimestamp();
- hash = 31 * hash + cell.getTypeByte();
- return hash;
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapTag.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapTag.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapTag.java
deleted file mode 100644
index b3d65bb..0000000
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapTag.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Copyright The Apache Software Foundation
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase;
-
-import java.nio.ByteBuffer;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.classification.InterfaceStability;
-import org.apache.hadoop.hbase.util.ByteBufferUtils;
-
-/**
- * This is a {@link Tag} implementation in which value is backed by an off heap
- * {@link java.nio.ByteBuffer}
- */
-@InterfaceAudience.Private
-@InterfaceStability.Evolving
-public class OffheapTag implements Tag {
-
- private ByteBuffer buffer;
- private int offset, length;
- private byte type;
-
- public OffheapTag(ByteBuffer buffer, int offset, int length) {
- this.buffer = buffer;
- this.offset = offset;
- this.length = length;
- this.type = ByteBufferUtils.toByte(buffer, offset + TAG_LENGTH_SIZE);
- }
-
- @Override
- public byte getType() {
- return this.type;
- }
-
- @Override
- public int getValueOffset() {
- return this.offset + INFRASTRUCTURE_SIZE;
- }
-
- @Override
- public int getValueLength() {
- return this.length - INFRASTRUCTURE_SIZE;
- }
-
- @Override
- public boolean hasArray() {
- return false;
- }
-
- @Override
- public byte[] getValueArray() {
- throw new UnsupportedOperationException(
- "Tag is backed by an off heap buffer. Use getValueByteBuffer()");
- }
-
- @Override
- public ByteBuffer getValueByteBuffer() {
- return this.buffer;
- }
-
- @Override
- public String toString() {
- return "[Tag type : " + this.type + ", value : "
- + ByteBufferUtils.toStringBinary(buffer, getValueOffset(), getValueLength()) + "]";
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/TagUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/TagUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/TagUtil.java
index 642444f..f9668dd 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/TagUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/TagUtil.java
@@ -95,7 +95,7 @@ public final class TagUtil {
int pos = offset;
while (pos < offset + length) {
int tagLen = ByteBufferUtils.readAsInt(b, pos, TAG_LENGTH_SIZE);
- tags.add(new OffheapTag(b, pos, tagLen + TAG_LENGTH_SIZE));
+ tags.add(new ByteBufferTag(b, pos, tagLen + TAG_LENGTH_SIZE));
pos += TAG_LENGTH_SIZE + tagLen;
}
return tags;
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodec.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodec.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodec.java
index 70ad3dd..9cccfe9 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodec.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodec.java
@@ -25,8 +25,8 @@ import java.nio.ByteBuffer;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseInterfaceAudience;
import org.apache.hadoop.hbase.KeyValueUtil;
+import org.apache.hadoop.hbase.NoTagsByteBufferKeyValue;
import org.apache.hadoop.hbase.NoTagsKeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.nio.ByteBuff;
import org.apache.hadoop.hbase.util.ByteBufferUtils;
@@ -111,7 +111,7 @@ public class KeyValueCodec implements Codec {
protected Cell createCell(ByteBuffer bb, int pos, int len) {
// We know there is not going to be any tags.
- return new OffheapKeyValue(bb, pos, len, 0);
+ return new NoTagsByteBufferKeyValue(bb, pos, len);
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodecWithTags.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodecWithTags.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodecWithTags.java
index de7f36c..90fff91 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodecWithTags.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/codec/KeyValueCodecWithTags.java
@@ -26,7 +26,7 @@ import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseInterfaceAudience;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.KeyValueUtil;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.nio.ByteBuff;
import org.apache.hadoop.hbase.util.ByteBufferUtils;
@@ -94,7 +94,7 @@ public class KeyValueCodecWithTags implements Codec {
@Override
protected Cell createCell(ByteBuffer bb, int pos, int len) {
- return new OffheapKeyValue(bb, pos, len);
+ return new ByteBufferKeyValue(bb, pos, len);
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java
index d202f48..4e14acb 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/RowIndexSeekerV1.java
@@ -25,7 +25,7 @@ import org.apache.hadoop.hbase.CellComparator;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.SizeCachedKeyValue;
import org.apache.hadoop.hbase.SizeCachedNoTagsKeyValue;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
@@ -382,7 +382,7 @@ public class RowIndexSeekerV1 extends AbstractEncodedSeeker {
currentBuffer.asSubByteBuffer(startOffset, cellBufSize, tmpPair);
ByteBuffer buf = tmpPair.getFirst();
if (buf.isDirect()) {
- ret = new OffheapKeyValue(buf, tmpPair.getSecond(), cellBufSize, seqId);
+ ret = new ByteBufferKeyValue(buf, tmpPair.getSecond(), cellBufSize, seqId);
} else {
if (tagsLength > 0) {
ret = new SizeCachedKeyValue(buf.array(), buf.arrayOffset()
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java
index 0f9c0ce..c73705a 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/test/RedundantKVGenerator.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.hbase.ArrayBackedTag;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellComparator;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.util.ByteBufferUtils;
@@ -370,7 +370,7 @@ public class RedundantKVGenerator {
ByteBuffer offheapKVBB = ByteBuffer.allocateDirect(keyValue.getLength());
ByteBufferUtils.copyFromArrayToBuffer(offheapKVBB, keyValue.getBuffer(),
keyValue.getOffset(), keyValue.getLength());
- OffheapKeyValue offheapKV =
+ ByteBufferKeyValue offheapKV =
new ExtendedOffheapKeyValue(offheapKVBB, 0, keyValue.getLength(), 0);
result.add(offheapKV);
} else {
@@ -378,7 +378,7 @@ public class RedundantKVGenerator {
ByteBuffer offheapKVBB = ByteBuffer.allocateDirect(keyValue.getLength());
ByteBufferUtils.copyFromArrayToBuffer(offheapKVBB, keyValue.getBuffer(),
keyValue.getOffset(), keyValue.getLength());
- OffheapKeyValue offheapKV =
+ ByteBufferKeyValue offheapKV =
new ExtendedOffheapKeyValue(offheapKVBB, 0, keyValue.getLength(), 0);
result.add(offheapKV);
}
@@ -389,7 +389,7 @@ public class RedundantKVGenerator {
return result;
}
- static class ExtendedOffheapKeyValue extends OffheapKeyValue {
+ static class ExtendedOffheapKeyValue extends ByteBufferKeyValue {
public ExtendedOffheapKeyValue(ByteBuffer buf, int offset, int length, long seqId) {
super(buf, offset, length, seqId);
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/test/java/org/apache/hadoop/hbase/TestByteBufferKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestByteBufferKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestByteBufferKeyValue.java
new file mode 100644
index 0000000..ff6c4f7
--- /dev/null
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestByteBufferKeyValue.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hadoop.hbase;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.hadoop.hbase.KeyValue.Type;
+import org.apache.hadoop.hbase.testclassification.MiscTests;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.apache.hadoop.hbase.util.ByteBufferUtils;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({ MiscTests.class, SmallTests.class })
+public class TestByteBufferKeyValue {
+ private static final String QUAL2 = "qual2";
+ private static final String FAM2 = "fam2";
+ private static final String QUAL1 = "qual1";
+ private static final String FAM1 = "fam1";
+ private static final String ROW1 = "row1";
+ private static final byte[] row1 = Bytes.toBytes(ROW1);
+ private static final byte[] fam1 = Bytes.toBytes(FAM1);
+ private static final byte[] fam2 = Bytes.toBytes(FAM2);
+ private static final byte[] qual1 = Bytes.toBytes(QUAL1);
+ private static final byte[] qual2 = Bytes.toBytes(QUAL2);
+ private static final Tag t1 = new ArrayBackedTag((byte) 1, Bytes.toBytes("TAG1"));
+ private static final Tag t2 = new ArrayBackedTag((byte) 2, Bytes.toBytes("TAG2"));
+ private static final ArrayList<Tag> tags = new ArrayList<Tag>();
+ static {
+ tags.add(t1);
+ tags.add(t2);
+ }
+
+ @Test
+ public void testByteBufferBackedKeyValue() throws Exception {
+ KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1);
+ ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
+ ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
+ ByteBufferCell offheapKV = new ByteBufferKeyValue(buf, 0, buf.capacity(), 0l);
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
+ offheapKV.getRowPosition(), offheapKV.getRowLength()));
+ assertEquals(
+ FAM1,
+ ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
+ offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
+ assertEquals(
+ QUAL1,
+ ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
+ offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
+ offheapKV.getValuePosition(), offheapKV.getValueLength()));
+ assertEquals(0L, offheapKV.getTimestamp());
+ assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
+
+ // Use the array() APIs
+ assertEquals(
+ ROW1,
+ Bytes.toStringBinary(offheapKV.getRowArray(),
+ offheapKV.getRowOffset(), offheapKV.getRowLength()));
+ assertEquals(
+ FAM1,
+ Bytes.toStringBinary(offheapKV.getFamilyArray(),
+ offheapKV.getFamilyOffset(), offheapKV.getFamilyLength()));
+ assertEquals(
+ QUAL1,
+ Bytes.toStringBinary(offheapKV.getQualifierArray(),
+ offheapKV.getQualifierOffset(), offheapKV.getQualifierLength()));
+ assertEquals(
+ ROW1,
+ Bytes.toStringBinary(offheapKV.getValueArray(),
+ offheapKV.getValueOffset(), offheapKV.getValueLength()));
+ assertEquals(0L, offheapKV.getTimestamp());
+ assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
+
+ kvCell = new KeyValue(row1, fam2, qual2, 0l, Type.Put, row1);
+ buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
+ ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
+ offheapKV = new ByteBufferKeyValue(buf, 0, buf.capacity(), 0l);
+ assertEquals(
+ FAM2,
+ ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
+ offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
+ assertEquals(
+ QUAL2,
+ ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
+ offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
+ byte[] nullQualifier = new byte[0];
+ kvCell = new KeyValue(row1, fam1, nullQualifier, 0L, Type.Put, row1);
+ buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
+ ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
+ offheapKV = new ByteBufferKeyValue(buf, 0, buf.capacity(), 0l);
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
+ offheapKV.getRowPosition(), offheapKV.getRowLength()));
+ assertEquals(
+ FAM1,
+ ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
+ offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
+ assertEquals(
+ "",
+ ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
+ offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
+ offheapKV.getValuePosition(), offheapKV.getValueLength()));
+ assertEquals(0L, offheapKV.getTimestamp());
+ assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
+ }
+
+ @Test
+ public void testByteBufferBackedKeyValueWithTags() throws Exception {
+ KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1, tags);
+ ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
+ ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
+ ByteBufferCell offheapKV = new ByteBufferKeyValue(buf, 0, buf.capacity(), 0l);
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
+ offheapKV.getRowPosition(), offheapKV.getRowLength()));
+ assertEquals(
+ FAM1,
+ ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
+ offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
+ assertEquals(
+ QUAL1,
+ ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
+ offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
+ offheapKV.getValuePosition(), offheapKV.getValueLength()));
+ assertEquals(0L, offheapKV.getTimestamp());
+ assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
+ // change tags to handle both onheap and offheap stuff
+ List<Tag> resTags = TagUtil.asList(offheapKV.getTagsArray(), offheapKV.getTagsOffset(),
+ offheapKV.getTagsLength());
+ Tag tag1 = resTags.get(0);
+ assertEquals(t1.getType(), tag1.getType());
+ assertEquals(TagUtil.getValueAsString(t1), TagUtil.getValueAsString(tag1));
+ Tag tag2 = resTags.get(1);
+ assertEquals(tag2.getType(), tag2.getType());
+ assertEquals(TagUtil.getValueAsString(t2), TagUtil.getValueAsString(tag2));
+ Tag res = CellUtil.getTag(offheapKV, (byte) 2);
+ assertEquals(TagUtil.getValueAsString(t2), TagUtil.getValueAsString(tag2));
+ res = CellUtil.getTag(offheapKV, (byte) 3);
+ assertNull(res);
+ }
+
+ @Test
+ public void testGetKeyMethods() throws Exception {
+ KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1, tags);
+ ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getKeyLength());
+ ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), kvCell.getKeyOffset(),
+ kvCell.getKeyLength());
+ ByteBufferCell offheapKeyOnlyKV = new ByteBufferKeyOnlyKeyValue(buf, 0, buf.capacity());
+ assertEquals(
+ ROW1,
+ ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getRowByteBuffer(),
+ offheapKeyOnlyKV.getRowPosition(), offheapKeyOnlyKV.getRowLength()));
+ assertEquals(
+ FAM1,
+ ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getFamilyByteBuffer(),
+ offheapKeyOnlyKV.getFamilyPosition(), offheapKeyOnlyKV.getFamilyLength()));
+ assertEquals(
+ QUAL1,
+ ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getQualifierByteBuffer(),
+ offheapKeyOnlyKV.getQualifierPosition(),
+ offheapKeyOnlyKV.getQualifierLength()));
+ assertEquals(0L, offheapKeyOnlyKV.getTimestamp());
+ assertEquals(Type.Put.getCode(), offheapKeyOnlyKV.getTypeByte());
+ }
+}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/test/java/org/apache/hadoop/hbase/TestOffheapKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestOffheapKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestOffheapKeyValue.java
deleted file mode 100644
index dac7a56..0000000
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestOffheapKeyValue.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hadoop.hbase;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hadoop.hbase.KeyValue.Type;
-import org.apache.hadoop.hbase.testclassification.MiscTests;
-import org.apache.hadoop.hbase.testclassification.SmallTests;
-import org.apache.hadoop.hbase.util.ByteBufferUtils;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-@Category({ MiscTests.class, SmallTests.class })
-public class TestOffheapKeyValue {
- private static final String QUAL2 = "qual2";
- private static final String FAM2 = "fam2";
- private static final String QUAL1 = "qual1";
- private static final String FAM1 = "fam1";
- private static final String ROW1 = "row1";
- private static final byte[] row1 = Bytes.toBytes(ROW1);
- private static final byte[] fam1 = Bytes.toBytes(FAM1);
- private static final byte[] fam2 = Bytes.toBytes(FAM2);
- private static final byte[] qual1 = Bytes.toBytes(QUAL1);
- private static final byte[] qual2 = Bytes.toBytes(QUAL2);
- private static final Tag t1 = new ArrayBackedTag((byte) 1, Bytes.toBytes("TAG1"));
- private static final Tag t2 = new ArrayBackedTag((byte) 2, Bytes.toBytes("TAG2"));
- private static final ArrayList<Tag> tags = new ArrayList<Tag>();
- static {
- tags.add(t1);
- tags.add(t2);
- }
-
- @Test
- public void testByteBufferBackedKeyValue() throws Exception {
- KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1);
- ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
- ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
- ByteBufferCell offheapKV = new OffheapKeyValue(buf, 0, buf.capacity(), 0l);
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
- offheapKV.getRowPosition(), offheapKV.getRowLength()));
- assertEquals(
- FAM1,
- ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
- offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
- assertEquals(
- QUAL1,
- ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
- offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
- offheapKV.getValuePosition(), offheapKV.getValueLength()));
- assertEquals(0L, offheapKV.getTimestamp());
- assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
-
- // Use the array() APIs
- assertEquals(
- ROW1,
- Bytes.toStringBinary(offheapKV.getRowArray(),
- offheapKV.getRowOffset(), offheapKV.getRowLength()));
- assertEquals(
- FAM1,
- Bytes.toStringBinary(offheapKV.getFamilyArray(),
- offheapKV.getFamilyOffset(), offheapKV.getFamilyLength()));
- assertEquals(
- QUAL1,
- Bytes.toStringBinary(offheapKV.getQualifierArray(),
- offheapKV.getQualifierOffset(), offheapKV.getQualifierLength()));
- assertEquals(
- ROW1,
- Bytes.toStringBinary(offheapKV.getValueArray(),
- offheapKV.getValueOffset(), offheapKV.getValueLength()));
- assertEquals(0L, offheapKV.getTimestamp());
- assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
-
- kvCell = new KeyValue(row1, fam2, qual2, 0l, Type.Put, row1);
- buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
- ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
- offheapKV = new OffheapKeyValue(buf, 0, buf.capacity(), 0l);
- assertEquals(
- FAM2,
- ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
- offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
- assertEquals(
- QUAL2,
- ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
- offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
- byte[] nullQualifier = new byte[0];
- kvCell = new KeyValue(row1, fam1, nullQualifier, 0L, Type.Put, row1);
- buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
- ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
- offheapKV = new OffheapKeyValue(buf, 0, buf.capacity(), 0l);
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
- offheapKV.getRowPosition(), offheapKV.getRowLength()));
- assertEquals(
- FAM1,
- ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
- offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
- assertEquals(
- "",
- ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
- offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
- offheapKV.getValuePosition(), offheapKV.getValueLength()));
- assertEquals(0L, offheapKV.getTimestamp());
- assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
- }
-
- @Test
- public void testByteBufferBackedKeyValueWithTags() throws Exception {
- KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1, tags);
- ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getBuffer().length);
- ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), 0, kvCell.getBuffer().length);
- ByteBufferCell offheapKV = new OffheapKeyValue(buf, 0, buf.capacity(), 0l);
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getRowByteBuffer(),
- offheapKV.getRowPosition(), offheapKV.getRowLength()));
- assertEquals(
- FAM1,
- ByteBufferUtils.toStringBinary(offheapKV.getFamilyByteBuffer(),
- offheapKV.getFamilyPosition(), offheapKV.getFamilyLength()));
- assertEquals(
- QUAL1,
- ByteBufferUtils.toStringBinary(offheapKV.getQualifierByteBuffer(),
- offheapKV.getQualifierPosition(), offheapKV.getQualifierLength()));
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKV.getValueByteBuffer(),
- offheapKV.getValuePosition(), offheapKV.getValueLength()));
- assertEquals(0L, offheapKV.getTimestamp());
- assertEquals(Type.Put.getCode(), offheapKV.getTypeByte());
- // change tags to handle both onheap and offheap stuff
- List<Tag> resTags = TagUtil.asList(offheapKV.getTagsArray(), offheapKV.getTagsOffset(),
- offheapKV.getTagsLength());
- Tag tag1 = resTags.get(0);
- assertEquals(t1.getType(), tag1.getType());
- assertEquals(TagUtil.getValueAsString(t1), TagUtil.getValueAsString(tag1));
- Tag tag2 = resTags.get(1);
- assertEquals(tag2.getType(), tag2.getType());
- assertEquals(TagUtil.getValueAsString(t2), TagUtil.getValueAsString(tag2));
- Tag res = CellUtil.getTag(offheapKV, (byte) 2);
- assertEquals(TagUtil.getValueAsString(t2), TagUtil.getValueAsString(tag2));
- res = CellUtil.getTag(offheapKV, (byte) 3);
- assertNull(res);
- }
-
- @Test
- public void testGetKeyMethods() throws Exception {
- KeyValue kvCell = new KeyValue(row1, fam1, qual1, 0l, Type.Put, row1, tags);
- ByteBuffer buf = ByteBuffer.allocateDirect(kvCell.getKeyLength());
- ByteBufferUtils.copyFromArrayToBuffer(buf, kvCell.getBuffer(), kvCell.getKeyOffset(),
- kvCell.getKeyLength());
- ByteBufferCell offheapKeyOnlyKV = new ByteBufferKeyOnlyKeyValue(buf, 0, buf.capacity());
- assertEquals(
- ROW1,
- ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getRowByteBuffer(),
- offheapKeyOnlyKV.getRowPosition(), offheapKeyOnlyKV.getRowLength()));
- assertEquals(
- FAM1,
- ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getFamilyByteBuffer(),
- offheapKeyOnlyKV.getFamilyPosition(), offheapKeyOnlyKV.getFamilyLength()));
- assertEquals(
- QUAL1,
- ByteBufferUtils.toStringBinary(offheapKeyOnlyKV.getQualifierByteBuffer(),
- offheapKeyOnlyKV.getQualifierPosition(),
- offheapKeyOnlyKV.getQualifierLength()));
- assertEquals(0L, offheapKeyOnlyKV.getTimestamp());
- assertEquals(Type.Put.getCode(), offheapKeyOnlyKV.getTypeByte());
- }
-}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-common/src/test/java/org/apache/hadoop/hbase/io/TestTagCompressionContext.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/io/TestTagCompressionContext.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/io/TestTagCompressionContext.java
index 9e8ba8e..5e609ad 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/io/TestTagCompressionContext.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/io/TestTagCompressionContext.java
@@ -27,7 +27,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.ArrayBackedTag;
import org.apache.hadoop.hbase.ByteBufferCell;
@@ -166,7 +166,7 @@ public class TestTagCompressionContext {
KeyValue kv = new KeyValue(ROW, CF, Q, 1234L, V, tags);
ByteBuffer dbb = ByteBuffer.allocateDirect(kv.getBuffer().length);
ByteBufferUtils.copyFromArrayToBuffer(dbb, kv.getBuffer(), 0, kv.getBuffer().length);
- OffheapKeyValue offheapKV = new OffheapKeyValue(dbb, 0, kv.getBuffer().length, 0);
+ ByteBufferKeyValue offheapKV = new ByteBufferKeyValue(dbb, 0, kv.getBuffer().length, 0);
return offheapKV;
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
index 1bb5274..c92d77d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
@@ -36,7 +36,7 @@ import org.apache.hadoop.hbase.CellComparator;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.SizeCachedKeyValue;
import org.apache.hadoop.hbase.SizeCachedNoTagsKeyValue;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
@@ -957,7 +957,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
} else {
ByteBuffer buf = blockBuffer.asSubByteBuffer(cellBufSize);
if (buf.isDirect()) {
- ret = new OffheapKeyValue(buf, buf.position(), cellBufSize, seqId);
+ ret = new ByteBufferKeyValue(buf, buf.position(), cellBufSize, seqId);
} else {
if (currTagsLen > 0) {
ret = new SizeCachedKeyValue(buf.array(), buf.arrayOffset() + buf.position(),
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java
index d4511b9..f881e7a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java
@@ -385,23 +385,23 @@ public class SimpleRegionObserver extends BaseRegionObserver {
List<Cell> cells = familyMap.get(TestRegionObserverInterface.A);
assertNotNull(cells);
assertNotNull(cells.get(0));
- KeyValue kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.A, 0,
+ Cell cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.A, 0,
TestRegionObserverInterface.A.length));
cells = familyMap.get(TestRegionObserverInterface.B);
assertNotNull(cells);
assertNotNull(cells.get(0));
- kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.B, 0,
+ cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.B, 0,
TestRegionObserverInterface.B.length));
cells = familyMap.get(TestRegionObserverInterface.C);
assertNotNull(cells);
assertNotNull(cells.get(0));
- kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.C, 0,
+ cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.C, 0,
TestRegionObserverInterface.C.length));
}
ctPrePut.incrementAndGet();
@@ -422,25 +422,25 @@ public class SimpleRegionObserver extends BaseRegionObserver {
assertNotNull(cells);
assertNotNull(cells.get(0));
// KeyValue v1 expectation. Cast for now until we go all Cell all the time. TODO
- KeyValue kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.A, 0,
+ Cell cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.A, 0,
TestRegionObserverInterface.A.length));
cells = familyMap.get(TestRegionObserverInterface.B);
assertNotNull(cells);
assertNotNull(cells.get(0));
// KeyValue v1 expectation. Cast for now until we go all Cell all the time. TODO
- kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.B, 0,
+ cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.B, 0,
TestRegionObserverInterface.B.length));
cells = familyMap.get(TestRegionObserverInterface.C);
assertNotNull(cells);
assertNotNull(cells.get(0));
// KeyValue v1 expectation. Cast for now until we go all Cell all the time. TODO
- kv = (KeyValue)cells.get(0);
- assertTrue(Bytes.equals(kv.getQualifierArray(), kv.getQualifierOffset(),
- kv.getQualifierLength(), TestRegionObserverInterface.C, 0,
+ cell = cells.get(0);
+ assertTrue(Bytes.equals(cell.getQualifierArray(), cell.getQualifierOffset(),
+ cell.getQualifierLength(), TestRegionObserverInterface.C, 0,
TestRegionObserverInterface.C.length));
}
ctPostPut.incrementAndGet();
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java
index 3a635b8..1b00ae8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestDependentColumnFilter.java
@@ -152,7 +152,7 @@ public class TestDependentColumnFilter {
int cells = 0;
for (boolean done = true; done; i++) {
done = scanner.next(results);
- Arrays.sort(results.toArray(new KeyValue[results.size()]),
+ Arrays.sort(results.toArray(new Cell[results.size()]),
CellComparator.COMPARATOR);
LOG.info("counter=" + i + ", " + results);
if (results.isEmpty()) break;
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.java
index 898f3bb..94e7219 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.java
@@ -35,7 +35,7 @@ import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.Put;
@@ -119,14 +119,14 @@ public class TestScannerFromBucketCache {
List<Cell> actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
// do the scan again and verify. This time it should be from the lru cache
actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
@@ -157,7 +157,7 @@ public class TestScannerFromBucketCache {
List<Cell> actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
// Wait for the bucket cache threads to move the data to offheap
@@ -166,7 +166,7 @@ public class TestScannerFromBucketCache {
actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertTrue(actual.get(i) instanceof OffheapKeyValue);
+ assertTrue(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
@@ -198,7 +198,7 @@ public class TestScannerFromBucketCache {
List<Cell> actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
// Wait for the bucket cache threads to move the data to offheap
@@ -218,7 +218,7 @@ public class TestScannerFromBucketCache {
if (i != 5) {
// the last cell fetched will be of type shareable but not offheap because
// the MBB is copied to form a single cell
- assertTrue(actual.get(i) instanceof OffheapKeyValue);
+ assertTrue(actual.get(i) instanceof ByteBufferKeyValue);
}
}
@@ -250,14 +250,14 @@ public class TestScannerFromBucketCache {
List<Cell> actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
// do the scan again and verify. This time it should be from the bucket cache in onheap mode
actual = performScan(row1, fam1);
// Verify result
for (int i = 0; i < expected.size(); i++) {
- assertFalse(actual.get(i) instanceof OffheapKeyValue);
+ assertFalse(actual.get(i) instanceof ByteBufferKeyValue);
assertTrue(CellUtil.equalsIgnoreMvccVersion(expected.get(i), actual.get(i)));
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
index 9ec6dc9..a8fe3f0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestSeekTo.java
@@ -41,7 +41,7 @@ import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.TagUtil;
import org.apache.hadoop.hbase.ArrayBackedTag;
@@ -215,7 +215,7 @@ public class TestSeekTo {
// seekBefore d, so the scanner points to c
assertTrue(scanner.seekBefore(toKV("d", tagUsage)));
- assertFalse(scanner.getCell() instanceof OffheapKeyValue);
+ assertFalse(scanner.getCell() instanceof ByteBufferKeyValue);
assertEquals("c", toRowStr(scanner.getCell()));
// reseekTo e and g
assertEquals(0, scanner.reseekTo(toKV("c", tagUsage)));
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java
index c094ccb..f943ce4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java
@@ -29,7 +29,7 @@ import org.apache.hadoop.hbase.CellComparator;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.client.Append;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
@@ -331,7 +331,7 @@ public class TestProtobufUtil {
kv3.getLength());
ByteBuffer dbb = ByteBuffer.allocateDirect(arr.length);
dbb.put(arr);
- OffheapKeyValue offheapKV = new OffheapKeyValue(dbb, kv1.getLength(), kv2.getLength());
+ ByteBufferKeyValue offheapKV = new ByteBufferKeyValue(dbb, kv1.getLength(), kv2.getLength());
CellProtos.Cell cell = org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toCell(offheapKV);
Cell newOffheapKV = org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toCell(cell);
assertTrue(CellComparator.COMPARATOR.compare(offheapKV, newOffheapKV) == 0);
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java
index 49b5139..42aad5c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java
@@ -19,6 +19,7 @@
package org.apache.hadoop.hbase.regionserver;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.KeyValueUtil;
import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;
@@ -34,6 +35,7 @@ import org.junit.experimental.categories.Category;
import java.io.IOException;
import java.lang.management.ManagementFactory;
+import java.nio.ByteBuffer;
import java.util.List;
import java.util.Random;
@@ -77,7 +79,7 @@ public class TestMemStoreChunkPool {
Random rand = new Random();
MemStoreLAB mslab = new MemStoreLABImpl(conf);
int expectedOff = 0;
- byte[] lastBuffer = null;
+ ByteBuffer lastBuffer = null;
final byte[] rk = Bytes.toBytes("r1");
final byte[] cf = Bytes.toBytes("f");
final byte[] q = Bytes.toBytes("q");
@@ -86,14 +88,14 @@ public class TestMemStoreChunkPool {
int valSize = rand.nextInt(1000);
KeyValue kv = new KeyValue(rk, cf, q, new byte[valSize]);
int size = KeyValueUtil.length(kv);
- KeyValue newKv = (KeyValue) mslab.copyCellInto(kv);
+ ByteBufferKeyValue newKv = (ByteBufferKeyValue) mslab.copyCellInto(kv);
if (newKv.getBuffer() != lastBuffer) {
expectedOff = 0;
lastBuffer = newKv.getBuffer();
}
assertEquals(expectedOff, newKv.getOffset());
assertTrue("Allocation overruns buffer",
- newKv.getOffset() + size <= newKv.getBuffer().length);
+ newKv.getOffset() + size <= newKv.getBuffer().capacity());
expectedOff += size;
}
// chunks will be put back to pool after close
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java
index 082dfbf..c106c04 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.regionserver;
import static org.junit.Assert.*;
import java.lang.management.ManagementFactory;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -28,6 +29,7 @@ import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
@@ -73,7 +75,7 @@ public class TestMemStoreLAB {
Random rand = new Random();
MemStoreLAB mslab = new MemStoreLABImpl();
int expectedOff = 0;
- byte[] lastBuffer = null;
+ ByteBuffer lastBuffer = null;
// 100K iterations by 0-1K alloc -> 50MB expected
// should be reasonable for unit test and also cover wraparound
// behavior
@@ -81,14 +83,14 @@ public class TestMemStoreLAB {
int valSize = rand.nextInt(1000);
KeyValue kv = new KeyValue(rk, cf, q, new byte[valSize]);
int size = KeyValueUtil.length(kv);
- KeyValue newKv = (KeyValue) mslab.copyCellInto(kv);
+ ByteBufferKeyValue newKv = (ByteBufferKeyValue) mslab.copyCellInto(kv);
if (newKv.getBuffer() != lastBuffer) {
expectedOff = 0;
lastBuffer = newKv.getBuffer();
}
assertEquals(expectedOff, newKv.getOffset());
assertTrue("Allocation overruns buffer",
- newKv.getOffset() + size <= newKv.getBuffer().length);
+ newKv.getOffset() + size <= newKv.getBuffer().capacity());
expectedOff += size;
}
}
@@ -127,9 +129,9 @@ public class TestMemStoreLAB {
int valSize = r.nextInt(1000);
KeyValue kv = new KeyValue(rk, cf, q, new byte[valSize]);
int size = KeyValueUtil.length(kv);
- KeyValue newKv = (KeyValue) mslab.copyCellInto(kv);
+ ByteBufferKeyValue newCell = (ByteBufferKeyValue) mslab.copyCellInto(kv);
totalAllocated.addAndGet(size);
- allocsByThisThread.add(new AllocRecord(newKv.getBuffer(), newKv.getOffset(), size));
+ allocsByThisThread.add(new AllocRecord(newCell.getBuffer(), newCell.getOffset(), size));
}
};
ctx.addThread(t);
@@ -143,7 +145,7 @@ public class TestMemStoreLAB {
// Partition the allocations by the actual byte[] they point into,
// make sure offsets are unique for each chunk
- Map<byte[], Map<Integer, AllocRecord>> mapsByChunk =
+ Map<ByteBuffer, Map<Integer, AllocRecord>> mapsByChunk =
Maps.newHashMap();
int sizeCounted = 0;
@@ -169,7 +171,7 @@ public class TestMemStoreLAB {
for (AllocRecord alloc : allocsInChunk.values()) {
assertEquals(expectedOff, alloc.offset);
assertTrue("Allocation overruns buffer",
- alloc.offset + alloc.size <= alloc.alloc.length);
+ alloc.offset + alloc.size <= alloc.alloc.capacity());
expectedOff += alloc.size;
}
}
@@ -251,11 +253,11 @@ public class TestMemStoreLAB {
}
private static class AllocRecord implements Comparable<AllocRecord>{
- private final byte[] alloc;
+ private final ByteBuffer alloc;
private final int offset;
private final int size;
- public AllocRecord(byte[] alloc, int offset, int size) {
+ public AllocRecord(ByteBuffer alloc, int offset, int size) {
super();
this.alloc = alloc;
this.offset = offset;
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestTags.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestTags.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestTags.java
index 32c7845..7fbb464 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestTags.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestTags.java
@@ -220,9 +220,8 @@ public class TestTags {
for (Result result : next) {
CellScanner cellScanner = result.cellScanner();
cellScanner.advance();
- KeyValue current = (KeyValue) cellScanner.current();
- assertTrue(current.getValueOffset() + current.getValueLength() == current.getOffset()
- + current.getLength());
+ Cell current = cellScanner.current();
+ assertEquals(0, current.getTagsLength());
}
} finally {
if (scanner != null)
@@ -239,9 +238,8 @@ public class TestTags {
for (Result result : next) {
CellScanner cellScanner = result.cellScanner();
cellScanner.advance();
- KeyValue current = (KeyValue) cellScanner.current();
- assertTrue(current.getValueOffset() + current.getValueLength() == current.getOffset()
- + current.getLength());
+ Cell current = cellScanner.current();
+ assertEquals(0, current.getTagsLength());
}
} finally {
if (scanner != null) {
@@ -325,7 +323,7 @@ public class TestTags {
while ((next = scanner.next()) != null) {
CellScanner cellScanner = next.cellScanner();
cellScanner.advance();
- KeyValue current = (KeyValue) cellScanner.current();
+ Cell current = cellScanner.current();
if (CellUtil.matchingRow(current, row)) {
assertEquals(1, TestCoprocessorForTags.tags.size());
Tag tag = TestCoprocessorForTags.tags.get(0);
@@ -350,7 +348,7 @@ public class TestTags {
while ((next = scanner.next()) != null) {
CellScanner cellScanner = next.cellScanner();
cellScanner.advance();
- KeyValue current = (KeyValue) cellScanner.current();
+ Cell current = cellScanner.current();
if (CellUtil.matchingRow(current, row)) {
assertEquals(1, TestCoprocessorForTags.tags.size());
Tag tag = TestCoprocessorForTags.tags.get(0);
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java
index ba5bfa3..c4329b8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java
@@ -30,7 +30,7 @@ import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.OffheapKeyValue;
+import org.apache.hadoop.hbase.ByteBufferKeyValue;
import org.apache.hadoop.hbase.Tag;
import org.apache.hadoop.hbase.TagUtil;
import org.apache.hadoop.hbase.ArrayBackedTag;
@@ -109,7 +109,7 @@ public class TestWALCellCodecWithCompression {
return new KeyValue(row, cf, q, HConstants.LATEST_TIMESTAMP, value, tags);
}
- private OffheapKeyValue createOffheapKV(int noOfTags) {
+ private ByteBufferKeyValue createOffheapKV(int noOfTags) {
byte[] row = Bytes.toBytes("myRow");
byte[] cf = Bytes.toBytes("myCF");
byte[] q = Bytes.toBytes("myQualifier");
@@ -121,6 +121,6 @@ public class TestWALCellCodecWithCompression {
KeyValue kv = new KeyValue(row, cf, q, HConstants.LATEST_TIMESTAMP, value, tags);
ByteBuffer dbb = ByteBuffer.allocateDirect(kv.getBuffer().length);
dbb.put(kv.getBuffer());
- return new OffheapKeyValue(dbb, 0, kv.getBuffer().length);
+ return new ByteBufferKeyValue(dbb, 0, kv.getBuffer().length);
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7763dd66/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java
index e601af7..8cef21e 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java
@@ -298,13 +298,13 @@ public class ExpAsStringVisibilityLabelServiceImpl implements VisibilityLabelSer
if (len < 0) {
// This is a NOT label.
len = (short) (-1 * len);
- String label = Bytes.toString(tag.getValueArray(), offset, len);
+ String label = getTagValuePartAsString(tag, offset, len);
if (authLabelsFinal.contains(label)) {
includeKV = false;
break;
}
} else {
- String label = Bytes.toString(tag.getValueArray(), offset, len);
+ String label = getTagValuePartAsString(tag, offset, len);
if (!authLabelsFinal.contains(label)) {
includeKV = false;
break;