From 4742df84d8049806cd234b23d06d6e129fde156b Mon Sep 17 00:00:00 2001 From: "hongxi.sy" Date: Wed, 14 Sep 2016 09:54:26 +0800 Subject: [PATCH] to #EHB-456 Cell should be compatible with branch-1.1.2 --- .../ipc/TestPayloadCarryingRpcController.java | 23 +++ .../hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java | 20 ++ .../main/java/org/apache/hadoop/hbase/Cell.java | 40 ++++ .../java/org/apache/hadoop/hbase/CellUtil.java | 217 ++++++++++++++++++++- .../java/org/apache/hadoop/hbase/KeyValue.java | 20 ++ .../org/apache/hadoop/hbase/OffheapKeyValue.java | 20 ++ .../io/encoding/BufferedDataBlockEncoder.java | 40 ++++ .../apache/hadoop/hbase/util/ByteBufferUtils.java | 1 + .../java/org/apache/hadoop/hbase/TestCellUtil.java | 48 +++++ .../java/org/apache/hadoop/hbase/TestKeyValue.java | 24 +++ .../hbase/codec/prefixtree/PrefixTreeSeeker.java | 40 ++++ .../codec/prefixtree/decode/PrefixTreeCell.java | 20 ++ .../org/apache/hadoop/hbase/TagRewriteCell.java | 20 ++ .../hadoop/hbase/io/hfile/HFileReaderImpl.java | 1 + 14 files changed, 533 insertions(+), 1 deletion(-) diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/ipc/TestPayloadCarryingRpcController.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/ipc/TestPayloadCarryingRpcController.java index a6ab797..dd959d8 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/ipc/TestPayloadCarryingRpcController.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/ipc/TestPayloadCarryingRpcController.java @@ -175,6 +175,29 @@ public class TestPayloadCarryingRpcController { // unused return null; } + @Override + public byte[] getValue() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getFamily() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getQualifier() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getRow() { + // TODO Auto-generated method stub + return null; + } }; } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java index c6c02ad..7a402a5 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ByteBufferedKeyOnlyKeyValue.java @@ -242,4 +242,24 @@ public class ByteBufferedKeyOnlyKeyValue extends ByteBufferedCell { public String toString() { return CellUtil.toString(this, false); } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/Cell.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/Cell.java index 4b63acb..7eb5547 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/Cell.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/Cell.java @@ -178,4 +178,44 @@ public interface Cell { * @return the total length of the tags in the Cell. */ int getTagsLength(); + + /** + * WARNING do not use, expensive. This gets an arraycopy of the cell's family. + * + * Added to ease transition from 0.94 -> 0.96. + * + * @deprecated as of 0.96, use {@link CellUtil#cloneFamily(Cell)} + */ + @Deprecated + byte[] getFamily(); + + /** + * WARNING do not use, expensive. This gets an arraycopy of the cell's qualifier. + * + * Added to ease transition from 0.94 -> 0.96. + * + * @deprecated as of 0.96, use {@link CellUtil#cloneQualifier(Cell)} + */ + @Deprecated + byte[] getQualifier(); + + /** + * WARNING do not use, expensive. this gets an arraycopy of the cell's row. + * + * Added to ease transition from 0.94 -> 0.96. + * + * @deprecated as of 0.96, use {@link CellUtil#getRowByte(Cell, int)} + */ + @Deprecated + byte[] getRow(); + + /** + * WARNING do not use, expensive. This gets an arraycopy of the cell's value. + * + * Added to ease transition from 0.94 -> 0.96. + * + * @deprecated as of 0.96, use {@link CellUtil#cloneValue(Cell)} + */ + @Deprecated + byte[] getValue(); } 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 c98dd90..168a16a 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 @@ -1708,6 +1708,26 @@ public final class CellUtil { public int getTagsLength() { return 0; } + + @Override + public byte[] getRow() { + return EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getFamily() { + return EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getQualifier() { + return EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getValue() { + return EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -1846,6 +1866,26 @@ public final class CellUtil { public int getValuePosition() { return 0; } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } @InterfaceAudience.Private @@ -1884,6 +1924,26 @@ public final class CellUtil { public byte getTypeByte() { return Type.Maximum.getCode(); } + + @Override + public byte[] getFamily() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getQualifier() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -1922,6 +1982,26 @@ public final class CellUtil { public byte getTypeByte() { return Type.Maximum.getCode(); } + + @Override + public byte[] getFamily() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getQualifier() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -1960,6 +2040,26 @@ public final class CellUtil { public byte getTypeByte() { return Type.Minimum.getCode(); } + + @Override + public byte[] getFamily() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getQualifier() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2012,6 +2112,21 @@ public final class CellUtil { public int getQualifierLength() { return this.colLength; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2063,6 +2178,26 @@ public final class CellUtil { public int getQualifierLength() { return this.qlength; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2136,6 +2271,26 @@ public final class CellUtil { public byte getTypeByte() { return Type.Minimum.getCode(); } + + @Override + public byte[] getFamily() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getQualifier() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2187,6 +2342,26 @@ public final class CellUtil { public int getQualifierLength() { return this.qlength; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2239,6 +2414,26 @@ public final class CellUtil { public int getQualifierLength() { return this.qlength; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } @InterfaceAudience.Private @@ -2280,5 +2475,25 @@ public final class CellUtil { public byte getTypeByte() { return Type.DeleteFamily.getCode(); } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return HConstants.EMPTY_BYTE_ARRAY; + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return HConstants.EMPTY_BYTE_ARRAY; + } } -} \ No newline at end of file +} diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java index 3ad92ea..9640ce8 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java @@ -2853,4 +2853,24 @@ public class KeyValue implements Cell, HeapSize, Cloneable, SettableSequenceId, return super.heapSize() + Bytes.SIZEOF_SHORT; } } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } 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 index ced1595..ca2aff2 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java @@ -262,4 +262,24 @@ public class OffheapKeyValue extends ByteBufferedCell implements HeapSize, Clone public String toString() { return CellUtil.toString(this, true); } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } 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 0d311ba..664a39b 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 @@ -461,6 +461,26 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder { } return lenToWrite + Bytes.SIZEOF_INT; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } protected static class OffheapDecodedCell extends ByteBufferedCell implements HeapSize, @@ -684,6 +704,26 @@ abstract class BufferedDataBlockEncoder implements DataBlockEncoder { } return lenToWrite + Bytes.SIZEOF_INT; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } protected abstract static class 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 1c1dc24..021f204 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 @@ -889,6 +889,7 @@ public final class ByteBufferUtils { public static void copyFromArrayToBuffer(ByteBuffer out, int outOffset, byte[] in, int inOffset, int length) { if (out.hasArray()) { +// System.out.println("copyFromArrayToBuffer(1)---" + in.length + "--" + inOffset + "--" + length + "--out---" + out.array().length + "--" + out.arrayOffset() + "---" + outOffset); System.arraycopy(in, inOffset, out.array(), out.arrayOffset() + outOffset, length); } else if (UNSAFE_AVAIL) { UnsafeAccess.copy(in, inOffset, out, outOffset, length); diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCellUtil.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCellUtil.java index 8390cd5..3a9bd0a 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCellUtil.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCellUtil.java @@ -196,6 +196,30 @@ public class TestCellUtil { // TODO Auto-generated method stub return 0; } + + @Override + public byte[] getValue() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getFamily() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getQualifier() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getRow() { + // TODO Auto-generated method stub + return null; + } }; /** @@ -658,5 +682,29 @@ public class TestCellUtil { } return this.offset + this.length - tagsLen; } + + @Override + public byte[] getValue() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getFamily() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getQualifier() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getRow() { + // TODO Auto-generated method stub + return null; + } } } diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java index 66d3d22..504d5d8 100644 --- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java +++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java @@ -717,6 +717,30 @@ public class TestKeyValue extends TestCase { public byte[] getTagsArray() { return this.kv.getTagsArray(); } + + @Override + public byte[] getValue() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getFamily() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getQualifier() { + // TODO Auto-generated method stub + return null; + } + + @Override + public byte[] getRow() { + // TODO Auto-generated method stub + return null; + } } public void testEqualsAndHashCode() throws Exception { diff --git a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java index b847288..8438603 100644 --- a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java +++ b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeSeeker.java @@ -378,6 +378,26 @@ public class PrefixTreeSeeker implements EncodedSeeker { public long heapSize() { return FIXED_OVERHEAD + rowLength + famLength + qualLength + valLength + tagsLength; } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } private static class OffheapPrefixTreeCell extends ByteBufferedCell implements Cell, @@ -589,5 +609,25 @@ public class PrefixTreeSeeker implements EncodedSeeker { return row + "/" + family + (family != null && family.length() > 0 ? ":" : "") + qualifier + "/" + timestamp + "/" + Type.codeToType(type); } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } } diff --git a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeCell.java b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeCell.java index f1da601..b97db5c 100644 --- a/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeCell.java +++ b/hbase-prefix-tree/src/main/java/org/apache/hadoop/hbase/codec/prefixtree/decode/PrefixTreeCell.java @@ -307,4 +307,24 @@ public class PrefixTreeCell extends ByteBufferedCell implements SettableSequence public int getTagsPosition() { return getTagsOffset(); } + + @Override + public byte[] getFamily() { + return CellUtil.cloneFamily(this); + } + + @Override + public byte[] getQualifier() { + return CellUtil.cloneQualifier(this); + } + + @Override + public byte[] getRow() { + return CellUtil.cloneRow(this); + } + + @Override + public byte[] getValue() { + return CellUtil.cloneValue(this); + } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/TagRewriteCell.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/TagRewriteCell.java index 3ada51a..2586f1e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/TagRewriteCell.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/TagRewriteCell.java @@ -174,4 +174,24 @@ public class TagRewriteCell implements Cell, SettableSequenceId, SettableTimesta // The incoming cell is supposed to be SettableSequenceId type. CellUtil.setSequenceId(cell, seqId); } + + @Override + public byte[] getValue() { + return cell.getValue(); + } + + @Override + public byte[] getFamily() { + return cell.getFamily(); + } + + @Override + public byte[] getQualifier() { + return cell.getQualifier(); + } + + @Override + public byte[] getRow() { + return cell.getRow(); + } } 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 d65b7a6..28860fc 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 @@ -193,6 +193,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable { comparator = trailer.createComparator(); dataBlockIndexReader = new HFileBlockIndex.CellBasedKeyBlockIndexReader(comparator, trailer.getNumDataIndexLevels(), this); + metaBlockIndexReader = new HFileBlockIndex.ByteArrayKeyBlockIndexReader(1); // Parse load-on-open data. -- 1.8.3.1