You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "stack (JIRA)" <ji...@apache.org> on 2018/06/09 15:12:00 UTC
[jira] [Commented] (HBASE-20710) extra cloneFamily() in
Mutation.add(Cell)
[ https://issues.apache.org/jira/browse/HBASE-20710?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16507030#comment-16507030 ]
stack commented on HBASE-20710:
-------------------------------
+1
I had this as a 'fix' in branch:
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 a6ddc14cca..1b750b950e 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
@@ -788,11 +788,10 @@ 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 = 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 {
The offence is the extra copy and the deserializations to find lengths to use locating the family bytes to copy.
Good one [~huaxiang].
> extra cloneFamily() in Mutation.add(Cell)
> -----------------------------------------
>
> Key: HBASE-20710
> URL: https://issues.apache.org/jira/browse/HBASE-20710
> Project: HBase
> Issue Type: Improvement
> Components: regionserver
> Affects Versions: 2.0.1
> Reporter: huaxiang sun
> Assignee: huaxiang sun
> Priority: Minor
>
> The cpu profiling shows that during PE randomWrite testing, about 1 percent of time is spent in cloneFamily. Reviewing code found that when a cell is DBB backed ByteBuffKeyValueCell (which is default with Netty Rpc), cell.getFamilyArray() will call cloneFamily() and there is again a cloneFamily() in the following line of the code. since this is the critical write path processing, this needs to be optimized.
> https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java#L791
> https://github.com/apache/hbase/blob/master/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java#L795
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)