hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From apurt...@apache.org
Subject [4/5] hbase git commit: HBASE-18026 ProtobufUtil seems to do extra array copying
Date Thu, 11 May 2017 20:51:43 GMT
HBASE-18026 ProtobufUtil seems to do extra array copying

Signed-off-by: Andrew Purtell <apurtell@apache.org>

Conflicts:
	hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/14ab4a9c
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/14ab4a9c
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/14ab4a9c

Branch: refs/heads/branch-1.2
Commit: 14ab4a9c47ed1532c0457430d30cbb08f2669d61
Parents: b6d1b19
Author: Vincent <vincent.poon@salesforce.com>
Authored: Wed May 10 18:01:49 2017 -0700
Committer: Andrew Purtell <apurtell@apache.org>
Committed: Thu May 11 13:28:47 2017 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/protobuf/ProtobufUtil.java     | 39 ++++++++++----------
 1 file changed, 20 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/14ab4a9c/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
index 24e6b1d..9318a4c 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.protobuf;
 
 
+import static com.google.protobuf.HBaseZeroCopyByteString.zeroCopyGetBytes;
 import static org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME;
 
 import java.io.ByteArrayOutputStream;
@@ -455,7 +456,7 @@ public final class ProtobufUtil {
   public static Get toGet(
       final ClientProtos.Get proto) throws IOException {
     if (proto == null) return null;
-    byte[] row = proto.getRow().toByteArray();
+    byte[] row = zeroCopyGetBytes(proto.getRow());
     Get get = new Get(row);
     if (proto.hasCacheBlocks()) {
       get.setCacheBlocks(proto.getCacheBlocks());
@@ -553,7 +554,7 @@ public final class ProtobufUtil {
     MutationType type = proto.getMutateType();
     assert type == MutationType.PUT: type.name();
     long timestamp = proto.hasTimestamp()? proto.getTimestamp(): HConstants.LATEST_TIMESTAMP;
-    Put put = proto.hasRow() ? new Put(proto.getRow().toByteArray(), timestamp) : null;
+    Put put = proto.hasRow() ? new Put(zeroCopyGetBytes(proto.getRow()), timestamp) : null;
     int cellCount = proto.hasAssociatedCellCount()? proto.getAssociatedCellCount(): 0;
     if (cellCount > 0) {
       // The proto has metadata only and the data is separate to be found in the cellScanner.
@@ -578,7 +579,7 @@ public final class ProtobufUtil {
       }
       // The proto has the metadata and the data itself
       for (ColumnValue column: proto.getColumnValueList()) {
-        byte[] family = column.getFamily().toByteArray();
+        byte[] family = zeroCopyGetBytes(column.getFamily());
         for (QualifierValue qv: column.getQualifierValueList()) {
           if (!qv.hasValue()) {
             throw new DoNotRetryIOException(
@@ -594,23 +595,23 @@ public final class ProtobufUtil {
           }
           byte[] tags;
           if (qv.hasTags()) {
-            tags = qv.getTags().toByteArray();
+            tags = zeroCopyGetBytes(qv.getTags());
             Object[] array = Tag.asList(tags, 0, (short)tags.length).toArray();
             Tag[] tagArray = new Tag[array.length];
             for(int i = 0; i< array.length; i++) {
               tagArray[i] = (Tag)array[i];
             }
             if(qv.hasDeleteType()) {
-              byte[] qual = qv.hasQualifier() ? qv.getQualifier().toByteArray() : null;
-              put.add(new KeyValue(proto.getRow().toByteArray(), family, qual, ts,
+              byte[] qual = qv.hasQualifier() ? zeroCopyGetBytes(qv.getQualifier()) : null;
+              put.add(new KeyValue(zeroCopyGetBytes(proto.getRow()), family, qual, ts,
                   fromDeleteType(qv.getDeleteType()), null, tags));
             } else {
               put.addImmutable(family, qualifier, ts, value, tagArray);
             }
           } else {
             if(qv.hasDeleteType()) {
-              byte[] qual = qv.hasQualifier() ? qv.getQualifier().toByteArray() : null;
-              put.add(new KeyValue(proto.getRow().toByteArray(), family, qual, ts,
+              byte[] qual = qv.hasQualifier() ? zeroCopyGetBytes(qv.getQualifier()) : null;
+              put.add(new KeyValue(zeroCopyGetBytes(proto.getRow()), family, qual, ts,
                   fromDeleteType(qv.getDeleteType())));
             } else{
               put.addImmutable(family, qualifier, ts, value);
@@ -651,7 +652,7 @@ public final class ProtobufUtil {
     MutationType type = proto.getMutateType();
     assert type == MutationType.DELETE : type.name();
     long timestamp = proto.hasTimestamp() ? proto.getTimestamp() : HConstants.LATEST_TIMESTAMP;
-    Delete delete = proto.hasRow() ? new Delete(proto.getRow().toByteArray(), timestamp)
: null;
+    Delete delete = proto.hasRow() ? new Delete(zeroCopyGetBytes(proto.getRow()), timestamp)
: null;
     int cellCount = proto.hasAssociatedCellCount()? proto.getAssociatedCellCount(): 0;
     if (cellCount > 0) {
       // The proto has metadata only and the data is separate to be found in the cellScanner.
@@ -719,7 +720,7 @@ public final class ProtobufUtil {
   throws IOException {
     MutationType type = proto.getMutateType();
     assert type == MutationType.APPEND : type.name();
-    byte [] row = proto.hasRow()? proto.getRow().toByteArray(): null;
+    byte [] row = proto.hasRow()? zeroCopyGetBytes(proto.getRow()): null;
     Append append = null;
     int cellCount = proto.hasAssociatedCellCount()? proto.getAssociatedCellCount(): 0;
     if (cellCount > 0) {
@@ -742,17 +743,17 @@ public final class ProtobufUtil {
     } else {
       append = new Append(row);
       for (ColumnValue column: proto.getColumnValueList()) {
-        byte[] family = column.getFamily().toByteArray();
+        byte[] family = zeroCopyGetBytes(column.getFamily());
         for (QualifierValue qv: column.getQualifierValueList()) {
-          byte[] qualifier = qv.getQualifier().toByteArray();
+          byte[] qualifier = zeroCopyGetBytes(qv.getQualifier());
           if (!qv.hasValue()) {
             throw new DoNotRetryIOException(
               "Missing required field: qualifier value");
           }
-          byte[] value = qv.getValue().toByteArray();
+          byte[] value = zeroCopyGetBytes(qv.getValue());
           byte[] tags = null;
           if (qv.hasTags()) {
-            tags = qv.getTags().toByteArray();
+            tags = zeroCopyGetBytes(qv.getTags());
           }
           append.add(CellUtil.createCell(row, family, qualifier, qv.getTimestamp(),
               KeyValue.Type.Put, value, tags));
@@ -798,7 +799,7 @@ public final class ProtobufUtil {
   throws IOException {
     MutationType type = proto.getMutateType();
     assert type == MutationType.INCREMENT : type.name();
-    byte [] row = proto.hasRow()? proto.getRow().toByteArray(): null;
+    byte [] row = proto.hasRow()? zeroCopyGetBytes(proto.getRow()): null;
     Increment increment = null;
     int cellCount = proto.hasAssociatedCellCount()? proto.getAssociatedCellCount(): 0;
     if (cellCount > 0) {
@@ -821,16 +822,16 @@ public final class ProtobufUtil {
     } else {
       increment = new Increment(row);
       for (ColumnValue column: proto.getColumnValueList()) {
-        byte[] family = column.getFamily().toByteArray();
+        byte[] family = zeroCopyGetBytes(column.getFamily());
         for (QualifierValue qv: column.getQualifierValueList()) {
-          byte[] qualifier = qv.getQualifier().toByteArray();
+          byte[] qualifier = zeroCopyGetBytes(qv.getQualifier());
           if (!qv.hasValue()) {
             throw new DoNotRetryIOException("Missing required field: qualifier value");
           }
-          byte[] value = qv.getValue().toByteArray();
+          byte[] value = zeroCopyGetBytes(qv.getValue());
           byte[] tags = null;
           if (qv.hasTags()) {
-            tags = qv.getTags().toByteArray();
+            tags = zeroCopyGetBytes(qv.getTags());
           }
           increment.add(CellUtil.createCell(row, family, qualifier, qv.getTimestamp(),
               KeyValue.Type.Put, value, tags));


Mime
View raw message