HBASE-20710 extra cloneFamily() in Mutation.add(Cell)

Signed-off-by: Michael Stack <stack@apache.org>
This commit is contained in:
Huaxiang Sun 2018-06-23 18:45:23 -07:00 committed by Michael Stack
parent eb67404cef
commit 633bab0c7b
1 changed files with 13 additions and 6 deletions

View File

@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.CellUtil; import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.ExtendedCell; import org.apache.hadoop.hbase.ExtendedCell;
import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.IndividualBytesFieldCell;
import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.PrivateCellUtil; import org.apache.hadoop.hbase.PrivateCellUtil;
import org.apache.hadoop.hbase.RawCell; import org.apache.hadoop.hbase.RawCell;
@ -115,10 +116,9 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C
this.row = clone.getRow(); this.row = clone.getRow();
this.ts = clone.getTimestamp(); this.ts = clone.getTimestamp();
this.familyMap = clone.getFamilyCellMap().entrySet().stream() this.familyMap = clone.getFamilyCellMap().entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey(), e -> new ArrayList<>(e.getValue()), .collect(Collectors.toMap(e -> e.getKey(), e -> new ArrayList<>(e.getValue()), (k, v) -> {
(k, v) -> { throw new RuntimeException("collisions!!!");
throw new RuntimeException("collisions!!!"); }, () -> new TreeMap<>(Bytes.BYTES_COMPARATOR)));
}, () -> 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)); " 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"); throw new IllegalArgumentException("Family cannot be null");
} }
byte[] family = CellUtil.cloneFamily(cell);
if (cell instanceof ExtendedCell) { if (cell instanceof ExtendedCell) {
getCellList(family).add(cell); getCellList(family).add(cell);
} else { } else {