[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15551724#comment-15551724 ] Hudson commented on HBASE-15721: SUCCESS: Integrated in Jenkins build HBase-Trunk_matrix #1736 (See [https://builds.apache.org/job/HBase-Trunk_matrix/1736/]) HBASE-15721 Optimization in cloning cells into MSLAB. (anoopsamjohn: rev 912ed1728683e68cf06c9a30cde0d0f89e87a880) * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java * (edit) hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java * (edit) hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStoreChunkPool.java * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/ExtendedCell.java * (edit) hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreLAB.java * (edit) hbase-common/src/main/java/org/apache/hadoop/hbase/OffheapKeyValue.java * (edit) hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java * (edit) hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.java > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch, HBASE-15721_V4.patch, HBASE-15721_V5.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. > Also avoid lots of garbage while doing this MSLAB copy. With every cell, we > used to create a ByteRange instance to pass the allocated chunk + offset from > MSLAB to Segment. Now we can make the MSLAB impl to do the allocation and > copy of the cell so that one object creation per cell addition can be avoided. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15551350#comment-15551350 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:blue}0{color} | {color:blue} reexec {color} | {color:blue} 0m 14s {color} | {color:blue} Docker mode activated. {color} | | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s {color} | {color:green} The patch does not contain any @author tags. {color} | | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s {color} | {color:green} The patch appears to include 2 new or modified test files. {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 8s {color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 3m 10s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 51s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 40s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 22s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 18s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 43s {color} | {color:green} master passed {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 9s {color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 1m 4s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 51s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 51s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 38s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 22s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s {color} | {color:green} The patch has no whitespace issues. {color} | | {color:green}+1{color} | {color:green} hadoopcheck {color} | {color:green} 27m 57s {color} | {color:green} Patch does not cause any errors with Hadoop 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.1 2.6.2 2.6.3 2.7.1. {color} | | {color:green}+1{color} | {color:green} hbaseprotoc {color} | {color:green} 0m 21s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 37s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 42s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 1m 41s {color} | {color:green} hbase-common in the patch passed. {color} | | {color:red}-1{color} | {color:red} unit {color} | {color:red} 71m 11s {color} | {color:red} hbase-server in the patch failed. {color} | | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 24s {color} | {color:green} The patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 116m 55s {color} | {color:black} {color} | \\ \\ || Reason || Tests || | Timed out junit tests | org.apache.hadoop.hbase.master.procedure.TestModifyTableProcedure | | | org.apache.hadoop.hbase.master.procedure.TestMasterProcedureSchedulerConcurrency | | | org.apache.hadoop.hbase.master.procedure.TestRestoreSnapshotProcedure | | | org.apache.hadoop.hbase.master.procedure.TestCloneSnapshotProcedure | \\ \\ || Subsystem || Report/Notes || | Docker | Client=1.11.2 Server=1.11.2 Image:yetus/hbase:7bda515 | | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12831899/HBASE-15721_V5.patch | | JIRA Issue | HBASE-15721 | | Optional Tests | asflicense javac javadoc unit findbugs hadoopcheck hbaseanti checkstyle compile | | uname | Linux 42be8b3995f9 3.13.0-36-lowlatency #63-Ubuntu SMP PREEMPT Wed Sep 3 21:56:12 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux | | Build tool | maven | | Personality | /home/jenkins/jenkins-slave/workspace/PreCommit-HBASE-Build/component/dev-support/hbase-personality.sh | | git revision | master / eb33b60 | | Default Java | 1.8.0_101 | | findbugs | v3.0.0 | | unit | https://builds.apache.or
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15551346#comment-15551346 ] ramkrishna.s.vasudevan commented on HBASE-15721: +1 on patch. Similar thing can be done even in write path. Since in cases where we expect the Cell to be backed by KV format we can write the key part as a whole in one shot instead of how it was being done before this patch. Since getBuffer() was to be removed I was thinking we can have a Key interface for some Cell impl. But with ExtendedCell now I think we can solve that. I will revive the other patch after this goes in. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch, HBASE-15721_V4.patch, HBASE-15721_V5.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. > Also avoid lots of garbage while doing this MSLAB copy. With every cell, we > used to create a ByteRange instance to pass the allocated chunk + offset from > MSLAB to Segment. Now we can make the MSLAB impl to do the allocation and > copy of the cell so that one object creation per cell addition can be avoided. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15549445#comment-15549445 ] Anoop Sam John commented on HBASE-15721: bq.we remove this deprecation which seems to be a regression: Not really.. The thing is in Cell there can not be any thing like a keybuffer of single buffer. But KV, we know is based on single buffer backed. So a getter for buffer there seems valid only. KV is private marked also. We have moved to Cell only flows in read and write paths. KV is having stuff like getKeyLength, getKeyOffset. These were never deprecated also.. The thing was that we were using KV.getBuffer through out our code in 0.96 time. But now things are clean. So IMHO, the getBuffer () in KV is making sense very much. If u strongly feel we should not remove deprecation I can undo that in this patch.. I just came across this API in this patch and thought there is no point in marking it as deprecated. Ya we copy the cell into the buf in KV format only. As long as there is no other kind of Cell impl, we will have to continue with these stuff.. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch, HBASE-15721_V4.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. > Also avoid lots of garbage while doing this MSLAB copy. With every cell, we > used to create a ByteRange instance to pass the allocated chunk + offset from > MSLAB to Segment. Now we can make the MSLAB impl to do the allocation and > copy of the cell so that one object creation per cell addition can be avoided. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15549067#comment-15549067 ] stack commented on HBASE-15721: --- This sort of stuff is odd... how we intend to address it going forward? offset = KeyValueUtil.appendToByteArray(this.cell, buf, offset, false); We are doing the above in the class named CellUtil. This stuff is fine but when do we move away from depending on the keyvalue being serialized in the old KeyValue way? When we going to do a Cell w/ a new layout! (smile). For example, we remove this deprecation which seems to be a regression: 243* @deprecated Since 0.98.0. Use Cell Interface instead. Do not presume single backing buffer. 1244 */ 1243 */ 1245 @Deprecated public byte [] getBuffer() { +1 on this patch as is. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch, HBASE-15721_V4.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. > Also avoid lots of garbage while doing this MSLAB copy. With every cell, we > used to create a ByteRange instance to pass the allocated chunk + offset from > MSLAB to Segment. Now we can make the MSLAB impl to do the allocation and > copy of the cell so that one object creation per cell addition can be avoided. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15548541#comment-15548541 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:blue}0{color} | {color:blue} reexec {color} | {color:blue} 0m 15s {color} | {color:blue} Docker mode activated. {color} | | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s {color} | {color:green} The patch does not contain any @author tags. {color} | | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s {color} | {color:green} The patch appears to include 2 new or modified test files. {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 10s {color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 3m 40s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 59s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 46s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 28s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 37s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 41s {color} | {color:green} master passed {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 9s {color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 1m 0s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 50s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 50s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 41s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 22s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s {color} | {color:green} The patch has no whitespace issues. {color} | | {color:green}+1{color} | {color:green} hadoopcheck {color} | {color:green} 29m 21s {color} | {color:green} Patch does not cause any errors with Hadoop 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.1 2.6.2 2.6.3 2.7.1. {color} | | {color:green}+1{color} | {color:green} hbaseprotoc {color} | {color:green} 0m 28s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 3m 1s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 53s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 1m 54s {color} | {color:green} hbase-common in the patch passed. {color} | | {color:red}-1{color} | {color:red} unit {color} | {color:red} 118m 47s {color} | {color:red} hbase-server in the patch failed. {color} | | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 28s {color} | {color:green} The patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 168m 6s {color} | {color:black} {color} | \\ \\ || Reason || Tests || | Failed junit tests | hadoop.hbase.master.procedure.TestMasterProcedureWalLease | | | hadoop.hbase.regionserver.TestHRegionWithInMemoryFlush | | Timed out junit tests | org.apache.hadoop.hbase.TestMultiVersions | | | org.apache.hadoop.hbase.TestNamespace | \\ \\ || Subsystem || Report/Notes || | Docker | Client=1.11.2 Server=1.11.2 Image:yetus/hbase:7bda515 | | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12831713/HBASE-15721_V4.patch | | JIRA Issue | HBASE-15721 | | Optional Tests | asflicense javac javadoc unit findbugs hadoopcheck hbaseanti checkstyle compile | | uname | Linux 2d22523a93b2 3.13.0-95-generic #142-Ubuntu SMP Fri Aug 12 17:00:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux | | Build tool | maven | | Personality | /home/jenkins/jenkins-slave/workspace/PreCommit-HBASE-Build/component/dev-support/hbase-personality.sh | | git revision | master / 617dfe1 | | Default Java | 1.8.0_101 | | findbugs | v3.0.0 | | unit | https://builds.apache.org/job/PreCommit-HBASE-Build/3833/artifact/patchprocess/patch-unit-hbase-server.txt |
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15533307#comment-15533307 ] Anoop Sam John commented on HBASE-15721: We are adding the write method to ExtendedCell now. So no concern of polluting the Streamable interface. (we dont have it any more) MSLAB responsibility is being increased. [~stack] ur concerns are addressed now.. May I commit this? > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. > Also avoid lots of garbage while doing this MSLAB copy. With every cell, we > used to create a ByteRange instance to pass the allocated chunk + offset from > MSLAB to Segment. Now we can make the MSLAB impl to do the allocation and > copy of the cell so that one object creation per cell addition can be avoided. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15528983#comment-15528983 ] ramkrishna.s.vasudevan commented on HBASE-15721: +1 > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch, > HBASE-15721_V3.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15527239#comment-15527239 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:blue}0{color} | {color:blue} reexec {color} | {color:blue} 0m 16s {color} | {color:blue} Docker mode activated. {color} | | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s {color} | {color:green} The patch does not contain any @author tags. {color} | | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s {color} | {color:green} The patch appears to include 2 new or modified test files. {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 44s {color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 3m 25s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 51s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 41s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 23s {color} | {color:green} master passed {color} | | {color:red}-1{color} | {color:red} findbugs {color} | {color:red} 0m 35s {color} | {color:red} hbase-common in master has 1 extant Findbugs warnings. {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 41s {color} | {color:green} master passed {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 9s {color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 1m 1s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 51s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 51s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 0m 39s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 23s {color} | {color:green} the patch passed {color} | | {color:red}-1{color} | {color:red} whitespace {color} | {color:red} 0m 0s {color} | {color:red} The patch has 1 line(s) that end in whitespace. Use git apply --whitespace=fix. {color} | | {color:green}+1{color} | {color:green} hadoopcheck {color} | {color:green} 25m 29s {color} | {color:green} Patch does not cause any errors with Hadoop 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.1 2.6.2 2.6.3 2.7.1. {color} | | {color:green}+1{color} | {color:green} hbaseprotoc {color} | {color:green} 0m 21s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 35s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 41s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 1m 43s {color} | {color:green} hbase-common in the patch passed. {color} | | {color:red}-1{color} | {color:red} unit {color} | {color:red} 82m 15s {color} | {color:red} hbase-server in the patch failed. {color} | | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 27s {color} | {color:green} The patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 126m 32s {color} | {color:black} {color} | \\ \\ || Reason || Tests || | Failed junit tests | hadoop.hbase.client.TestBlockEvictionFromClient | | Timed out junit tests | org.apache.hadoop.hbase.replication.TestReplicationStateHBaseImpl | | | org.apache.hadoop.hbase.master.procedure.TestMasterFailoverWithProcedures | | | org.apache.hadoop.hbase.master.procedure.TestDispatchMergingRegionsProcedure | | | org.apache.hadoop.hbase.master.procedure.TestRestoreSnapshotProcedure | | | org.apache.hadoop.hbase.master.procedure.TestTruncateTableProcedure | \\ \\ || Subsystem || Report/Notes || | Docker | Client=1.11.2 Server=1.11.2 Image:yetus/hbase:7bda515 | | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12830534/HBASE-15721_V3.patch | | JIRA Issue | HBASE-15721 | | Optional Tests | asflicense javac javadoc unit findbugs hadoopcheck hbaseanti checkstyle compile | | uname | Linux c277dd7ff37d 3.13.0-36-lowlatency #63-Ubuntu SMP PREEMPT Wed Sep 3 21:56:12 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux | | Build tool | maven | | Personality | /hom
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15522316#comment-15522316 ] Anoop Sam John commented on HBASE-15721: Working on this now as we have a patch almost good to go for HBASE-16134. In that we introduce ExtendedCell. We are getting rid of Streamable etc. We can add write(byte[], int) API into this. So this Jira will change the responsibility of the MSLAB from just being an allocator of memory. An MSLAB impl knows how to move a cell into a LAB area that it manages. So it copy cell data into LAB area and recreate the Cell over the newly copied data. Will post a patch soon. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15393491#comment-15393491 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:red}-1{color} | {color:red} patch {color} | {color:red} 0m 4s {color} | {color:red} HBASE-15721 does not apply to master. Rebase required? Wrong Branch? See https://yetus.apache.org/documentation/0.2.1/precommit-patchnames for help. {color} | \\ \\ || Subsystem || Report/Notes || | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12801386/HBASE-15721_V2.patch | | JIRA Issue | HBASE-15721 | | Console output | https://builds.apache.org/job/PreCommit-HBASE-Build/2769/console | | Powered by | Apache Yetus 0.2.1 http://yetus.apache.org | This message was automatically generated. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15393489#comment-15393489 ] Anoop Sam John commented on HBASE-15721: [~saint@gmail.com] Any objection in making the above scope change for MSLAB? Than just allocate bytes, it will do allocation + copy and recreation of the cell. This is required in the CompactingMemstore flatten to CellChunkMap. In this flattened form, we wont be having Cell objects. We will keep cell's meta data that it is in which chunk and at what offset. Normally from a KeyValue we wont get any info like chunkId. So if we allow this change, then the MSLAB impl can create a new Cell impl which keeps the chunkId also. I need to rework on the patch any way. Now there is a way not to add write() to Streamable > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15309874#comment-15309874 ] Anoop Sam John commented on HBASE-15721: So it we will change the scope of the MSLAB from just an allocator to one which allocates the bytes and copy cell to that. It will use a Codec for it. (It should be using the one in WAL write side rather than RPC side as the RPC side one by def skip Tags) > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15309295#comment-15309295 ] stack commented on HBASE-15721: --- Can we use the CellCodecs writing to MSLAB? Like we do in RPC? > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15308419#comment-15308419 ] Anoop Sam John commented on HBASE-15721: Yes. Increasing the responsibility of the MSLAB from just an allocator to one who manages that new area for this Cell. I felt this is ok. (?) We need serialize to Stream and BB. As of in this patch, there might be byte[] coming into picture. Once off heap MSLAB also in place, we will need BB. So better now only we can stick with BB. This Streamable interface helps us to do this serialize in one shot. Or else we will have to parse diff lengths and write each of them and each of the cell part (like RK, CF etc) one after the other.This was coming in Cell encoding in RPC side (To codec encoder). While we are at MSLAB, we were doing the N step way of writing out a cell into a new area. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266979#comment-15266979 ] stack commented on HBASE-15721: --- bq. So instead of allocating a chunk from interface and copy and recreate Cell in memstore class, we can allocate and clone within the MSLAB impl. May be we need change the comments on class. I think you are changing MSLAB from being an allocator to instead being a manager of the allocations; a change in responsibility. If so, lets work out who does what and make roles clear. Regards Streamable, it does seem like we need methods for serializing/deserializing Cells. We can't use 'Writeable' since that type is taken (and a mistake we'd like to not repeat). Where do we need Cell Serialization and rehydration? From Streams/BBs and byte arrays? Ok on the getBuffer. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266153#comment-15266153 ] Anoop Sam John commented on HBASE-15721: MemStoreLAB says {quote} Without the MSLAB, the byte array allocated during insertion end up interleaved throughout the * heap, and the old generation gets progressively more fragmented until a stop-the-world compacting * collection occurs. {quote} So instead of allocating a chunk from interface and copy and recreate Cell in memstore class, we can allocate and clone within the MSLAB impl. May be we need change the comments on class. Ah I missed reading the javadocs in Streamble.. Ya agree bit odd to add a write method into byte[]. So the best way will be to have a Writable interface? What do u say? It will help if we can write in one shot rather than individual components getBuffer() can be returned by any KeyValue. Not Cell.. Ya KeyValue we say it is backed by single byte[]. So I thought it is just fine. We deprecated it when the read and write flow had KeyValue as passed type (in some places) rather than Cell.. Now we have Cell every where. And Cell dont have getBuffer().. I thought it is just fine. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266138#comment-15266138 ] stack commented on HBASE-15721: --- We undeprecate the below: 1241 @Deprecated 1242 public byte [] getBuffer() { So, I can ask to get a byte [] on a KeyValue? Any KeyValue? Ain't you working hard to get rid of these? This is odd to add to Streamable Interface: {code} 48/** 49 * Serialize this cell to the given array at specified position 50 * @param buf array where to write 51 * @param offset Offset within buf where to write 52 */ 53void write(byte[] buf, int offset); {code} The Interface says "This marks a Cell as streamable to a given OutputStream." In the above, we are not 'streaming' to an OutputStream, we are writing a byte array. Then this ripples throughout our base types. Ditto on MemStoreLAB. It is about allocating bytes but then we add... * Clone the cell content to this MSLAB allocated memory area and create a new Cell around that. 43 * When it is not able to get enough space to clone this cell to, it returns null 46 */ 45Cell cloneInto(Cell cell); .. Seems odd we'd 'cloneInto' something that allocates. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch, HBASE-15721_V2.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15263635#comment-15263635 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:green}+1{color} | {color:green} hbaseanti {color} | {color:green} 0m 0s {color} | {color:green} Patch does not have any anti-patterns. {color} | | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s {color} | {color:green} The patch does not contain any @author tags. {color} | | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s {color} | {color:green} The patch appears to include 2 new or modified test files. {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 35s {color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 3m 2s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 6s {color} | {color:green} master passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 49s {color} | {color:green} master passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 2m 19s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 25s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 33s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 52s {color} | {color:green} master passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 48s {color} | {color:green} master passed with JDK v1.7.0_79 {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 9s {color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 0m 58s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 11s {color} | {color:green} the patch passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 1m 11s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 47s {color} | {color:green} the patch passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 47s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 2m 13s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 24s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s {color} | {color:green} Patch has no whitespace issues. {color} | | {color:green}+1{color} | {color:green} hadoopcheck {color} | {color:green} 25m 28s {color} | {color:green} Patch does not cause any errors with Hadoop 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.1 2.6.2 2.6.3 2.7.1. {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 3m 5s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 49s {color} | {color:green} the patch passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 48s {color} | {color:green} the patch passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 1m 43s {color} | {color:green} hbase-common in the patch passed. {color} | | {color:red}-1{color} | {color:red} unit {color} | {color:red} 88m 49s {color} | {color:red} hbase-server in the patch failed. {color} | | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 27s {color} | {color:green} Patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 140m 6s {color} | {color:black} {color} | \\ \\ || Reason || Tests || | Failed junit tests | hadoop.hbase.security.access.TestNamespaceCommands | \\ \\ || Subsystem || Report/Notes || | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12801386/HBASE-15721_V2.patch | | JIRA Issue | HBASE-15721 | | Optional Tests | asflicense javac javadoc unit findbugs hadoopcheck hbaseanti checkstyle compile | | uname | Linux asf900.gq1.ygridcore.net 3.13.0-36-lowlatency #6
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15261190#comment-15261190 ] Ted Yu commented on HBASE-15721: lgtm {code} 469 // We wont use this cells in the write path at all. {code} 'this cells' -> 'this cell' > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15260001#comment-15260001 ] Anoop Sam John commented on HBASE-15721: Oh in the other work space have already an off heap implementation of MSLAB and so we have BB backing the chunks. I will correct that. Ya for trunk as of now, this can be byte[] based. Later when we have off heaping in MSLAB also, we can change this byte[] to ByteBuffer. All these are private interfaces and so no problem. Any way al changed in trunk alone. > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15259968#comment-15259968 ] ramkrishna.s.vasudevan commented on HBASE-15721: Minor nit {code} Serialize this cell to the given ByteBuffer at specified position {code} This should be byte array. Later when you will add another method in Streamable write(ByteBuffer, int pos) that accepts BB.? > Optimization in cloning cells into MSLAB > > > Key: HBASE-15721 > URL: https://issues.apache.org/jira/browse/HBASE-15721 > Project: HBase > Issue Type: Sub-task > Components: regionserver >Reporter: Anoop Sam John >Assignee: Anoop Sam John > Fix For: 2.0.0 > > Attachments: HBASE-15721.patch > > > Before cells added to memstore CSLM, there is a clone of cell after copying > it to MSLAB chunk area. This is done not in an efficient way. > {code} > public static int appendToByteArray(final Cell cell, final byte[] output, > final int offset) { > int pos = offset; > pos = Bytes.putInt(output, pos, keyLength(cell)); > pos = Bytes.putInt(output, pos, cell.getValueLength()); > pos = appendKeyTo(cell, output, pos); > pos = CellUtil.copyValueTo(cell, output, pos); > if ((cell.getTagsLength() > 0)) { > pos = Bytes.putAsShort(output, pos, cell.getTagsLength()); > pos = CellUtil.copyTagTo(cell, output, pos); > } > return pos; > } > {code} > Copied in 9 steps and we end up parsing all lengths. When the cell > implementation is backed by a single byte[] (Like KeyValue) this can be done > in single step copy. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (HBASE-15721) Optimization in cloning cells into MSLAB
[ https://issues.apache.org/jira/browse/HBASE-15721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15259955#comment-15259955 ] Hadoop QA commented on HBASE-15721: --- | (x) *{color:red}-1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || | {color:green}+1{color} | {color:green} hbaseanti {color} | {color:green} 0m 0s {color} | {color:green} Patch does not have any anti-patterns. {color} | | {color:green}+1{color} | {color:green} @author {color} | {color:green} 0m 0s {color} | {color:green} The patch does not contain any @author tags. {color} | | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s {color} | {color:green} The patch appears to include 2 new or modified test files. {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 17s {color} | {color:blue} Maven dependency ordering for branch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 3m 2s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 1s {color} | {color:green} master passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 47s {color} | {color:green} master passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 2m 19s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 24s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 2m 36s {color} | {color:green} master passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 51s {color} | {color:green} master passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 49s {color} | {color:green} master passed with JDK v1.7.0_79 {color} | | {color:blue}0{color} | {color:blue} mvndep {color} | {color:blue} 0m 10s {color} | {color:blue} Maven dependency ordering for patch {color} | | {color:green}+1{color} | {color:green} mvninstall {color} | {color:green} 0m 58s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 2s {color} | {color:green} the patch passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 1m 2s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} compile {color} | {color:green} 0m 49s {color} | {color:green} the patch passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 0m 49s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} checkstyle {color} | {color:green} 2m 20s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} mvneclipse {color} | {color:green} 0m 24s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} whitespace {color} | {color:green} 0m 0s {color} | {color:green} Patch has no whitespace issues. {color} | | {color:green}+1{color} | {color:green} hadoopcheck {color} | {color:green} 25m 10s {color} | {color:green} Patch does not cause any errors with Hadoop 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.6.1 2.6.2 2.6.3 2.7.1. {color} | | {color:green}+1{color} | {color:green} findbugs {color} | {color:green} 3m 8s {color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 50s {color} | {color:green} the patch passed with JDK v1.8.0 {color} | | {color:green}+1{color} | {color:green} javadoc {color} | {color:green} 0m 49s {color} | {color:green} the patch passed with JDK v1.7.0_79 {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 1m 43s {color} | {color:green} hbase-common in the patch passed. {color} | | {color:red}-1{color} | {color:red} unit {color} | {color:red} 96m 3s {color} | {color:red} hbase-server in the patch failed. {color} | | {color:green}+1{color} | {color:green} asflicense {color} | {color:green} 0m 28s {color} | {color:green} Patch does not generate ASF License warnings. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 146m 47s {color} | {color:black} {color} | \\ \\ || Reason || Tests || | Failed junit tests | hadoop.hbase.regionserver.TestRegionMergeTransactionOnCluster | | | hadoop.hbase.security.access.TestNamespaceCommands | \\ \\ || Subsystem || Report/Notes || | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12800966/HBASE-15721.patch | | JIRA Issue | HBASE-15721 | | Optional Tests | asflicense javac javadoc unit findbugs hadoopcheck hbaseanti checkstyle compile