From 95dfa152bdbb89e3738f8d0740440db0b0965177 Mon Sep 17 00:00:00 2001 From: maoling Date: Thu, 14 Jun 2018 10:52:11 +0800 Subject: [PATCH] HBase-20623:Introduce the helper method "getCellBuilder()" to Mutation --- .../org/apache/hadoop/hbase/client/Append.java | 7 ++ .../org/apache/hadoop/hbase/client/Delete.java | 7 ++ .../org/apache/hadoop/hbase/client/Increment.java | 7 ++ .../org/apache/hadoop/hbase/client/Mutation.java | 92 ++++++++++++++++++++++ .../java/org/apache/hadoop/hbase/client/Put.java | 8 ++ .../main/java/org/apache/hadoop/hbase/Cell.java | 4 + 6 files changed, 125 insertions(+) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java index 3a08d68..d8e3f25 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Append.java @@ -23,6 +23,8 @@ import java.util.Map; import java.util.NavigableMap; import java.util.UUID; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellBuilder; +import org.apache.hadoop.hbase.CellBuilderType; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.io.TimeRange; import org.apache.hadoop.hbase.security.access.Permission; @@ -249,4 +251,9 @@ public class Append extends Mutation { public Append setTTL(long ttl) { return (Append) super.setTTL(ttl); } + + @Override + public CellBuilder getCellBuilder(CellBuilderType type) { + return getCellBuilder(type, Cell.Type.Append); + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java index 7c32a68..59b293e 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java @@ -25,6 +25,8 @@ import java.util.Map; import java.util.NavigableMap; import java.util.UUID; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellBuilder; +import org.apache.hadoop.hbase.CellBuilderType; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.security.access.Permission; @@ -349,4 +351,9 @@ public class Delete extends Mutation { public Delete setPriority(int priority) { return (Delete) super.setPriority(priority); } + + @Override + public CellBuilder getCellBuilder(CellBuilderType type) { + return getCellBuilder(type, Cell.Type.Delete); + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java index d7d1116..32c4eaa 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java @@ -25,6 +25,8 @@ import java.util.NavigableMap; import java.util.TreeMap; import java.util.UUID; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellBuilder; +import org.apache.hadoop.hbase.CellBuilderType; import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.io.TimeRange; @@ -352,4 +354,9 @@ public class Increment extends Mutation { public Increment setPriority(int priority) { return (Increment) super.setPriority(priority); } + + @Override + public CellBuilder getCellBuilder(CellBuilderType type) { + return getCellBuilder(type, Cell.Type.Increment); + } } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java index dc8199d..c5284fa 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java @@ -32,6 +32,9 @@ import java.util.TreeMap; import java.util.UUID; import java.util.stream.Collectors; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellBuilder; +import org.apache.hadoop.hbase.CellBuilderFactory; +import org.apache.hadoop.hbase.CellBuilderType; import org.apache.hadoop.hbase.CellScannable; import org.apache.hadoop.hbase.CellScanner; import org.apache.hadoop.hbase.CellUtil; @@ -808,6 +811,95 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C return this; } + public abstract CellBuilder getCellBuilder(CellBuilderType type); + + public CellBuilder getCellBuilder() { + return getCellBuilder(CellBuilderType.SHALLOW_COPY); + } + + /** + * get a CellBuilder instance that already has relevant Type and Row set. + * @param type + * @param cellType + * @return + */ + public CellBuilder getCellBuilder(CellBuilderType type, Cell.Type cellType) { + CellBuilder builder = CellBuilderFactory.create(type).setRow(row).setType(cellType); + return new CellBuilder() { + @Override + public CellBuilder setRow(byte[] row) { + return this; + } + + @Override + public CellBuilder setType(Cell.Type type) { + return this; + } + + @Override + public CellBuilder setRow(byte[] row, int rOffset, int rLength) { + builder.setRow(row, rOffset, rLength); + return this; + } + + @Override + public CellBuilder setFamily(byte[] family) { + builder.setFamily(family); + return this; + } + + @Override + public CellBuilder setFamily(byte[] family, int fOffset, int fLength) { + builder.setFamily(family, fOffset, fLength); + return this; + } + + @Override + public CellBuilder setQualifier(byte[] qualifier) { + builder.setQualifier(qualifier); + return this; + } + + @Override + public CellBuilder setQualifier(byte[] qualifier, int qOffset, int qLength) { + builder.setQualifier(qualifier, qOffset, qLength); + return this; + } + + @Override + public CellBuilder setTimestamp(long timestamp) { + builder.setTimestamp(timestamp); + return this; + } + + @Override + public CellBuilder setValue(byte[] value) { + builder.setValue(value); + return this; + } + + @Override + public CellBuilder setValue(byte[] value, int vOffset, int vLength) { + builder.setValue(value, vOffset, vLength); + return this; + } + + @Override + public Cell build() { + return builder.build(); + } + + @Override + public CellBuilder clear() { + builder.clear(); + // reset the row and type + builder.setRow(row); + builder.setType(Cell.Type.Put); + return this; + } + }; + } + private static final class CellWrapper implements ExtendedCell { private static final long FIXED_OVERHEAD = ClassSize.align( ClassSize.OBJECT // object header diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java index db8eec5..78062e8 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java @@ -26,6 +26,8 @@ import java.util.Map; import java.util.NavigableMap; import java.util.UUID; import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellBuilder; +import org.apache.hadoop.hbase.CellBuilderType; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.IndividualBytesFieldCell; import org.apache.hadoop.hbase.KeyValue; @@ -339,4 +341,10 @@ public class Put extends Mutation implements HeapSize { public Put setTTL(long ttl) { return (Put) super.setTTL(ttl); } + + @Override + public CellBuilder getCellBuilder(CellBuilderType type) { + return getCellBuilder(type, Cell.Type.Put); + } + } 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 8cdefff..d0f1084 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 @@ -219,8 +219,12 @@ public interface Cell { * The valid types for user to build the cell. Currently, This is subset of {@link KeyValue.Type}. */ enum Type { + Append((byte) 2), + Put((byte) 4), + Increment((byte) 6), + Delete((byte) 8), DeleteFamilyVersion((byte) 10), -- 1.8.3.1