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)