From 633bab0c7b50a8358a70108b8cf93a03c16fb778 Mon Sep 17 00:00:00 2001 From: Huaxiang Sun Date: Sat, 23 Jun 2018 18:45:23 -0700 Subject: [PATCH] HBASE-20710 extra cloneFamily() in Mutation.add(Cell) Signed-off-by: Michael Stack --- .../apache/hadoop/hbase/client/Mutation.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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 a6ddc14cca0..3d935011dd9 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 {