HBASE-20710 extra cloneFamily() in Mutation.add(Cell)
Signed-off-by: Michael Stack <st...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/79800e60
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/79800e60
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/79800e60

Branch: refs/heads/HBASE-19064
Commit: 79800e607cb12111101684e5d9fedc4df4e52e1e
Parents: 55147c7
Author: Huaxiang Sun <h...@cloudera.com>
Authored: Sat Jun 23 18:45:23 2018 -0700
Committer: Michael Stack <st...@apache.org>
Committed: Sat Jun 23 20:37:14 2018 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/Mutation.java | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/79800e60/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java
----------------------------------------------------------------------
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 a6ddc14..3d93501 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
@@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.CellScanner;
 import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.ExtendedCell;
 import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.IndividualBytesFieldCell;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.PrivateCellUtil;
 import org.apache.hadoop.hbase.RawCell;
@@ -115,10 +116,9 @@ public abstract class Mutation extends 
OperationWithAttributes implements Row, C
     this.row = clone.getRow();
     this.ts = clone.getTimestamp();
     this.familyMap = clone.getFamilyCellMap().entrySet().stream()
-      .collect(Collectors.toMap(e -> e.getKey(), e -> new 
ArrayList<>(e.getValue()),
-        (k, v) -> {
-          throw new RuntimeException("collisions!!!");
-        }, () -> new TreeMap<>(Bytes.BYTES_COMPARATOR)));
+      .collect(Collectors.toMap(e -> e.getKey(), e -> new 
ArrayList<>(e.getValue()), (k, v) -> {
+            throw new RuntimeException("collisions!!!");
+          }, () -> new TreeMap<>(Bytes.BYTES_COMPARATOR)));
   }
 
   /**
@@ -788,11 +788,18 @@ public abstract class Mutation extends 
OperationWithAttributes implements Row, C
         " doesn't match the original one " +  Bytes.toStringBinary(this.row));
     }
 
-    if (cell.getFamilyArray() == null || cell.getFamilyLength() == 0) {
+    byte[] family;
+
+    if (cell instanceof IndividualBytesFieldCell) {
+      family = cell.getFamilyArray();
+    } else {
+      family = CellUtil.cloneFamily(cell);
+    }
+
+    if (family == null || family.length == 0) {
       throw new IllegalArgumentException("Family cannot be null");
     }
 
-    byte[] family = CellUtil.cloneFamily(cell);
     if (cell instanceof ExtendedCell) {
       getCellList(family).add(cell);
     } else {

Reply via email to