You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2017/05/11 20:51:42 UTC
[3/5] hbase git commit: HBASE-18026 ProtobufUtil seems to do extra
array copying
HBASE-18026 ProtobufUtil seems to do extra array copying
Signed-off-by: Andrew Purtell <ap...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/80d7d1a5
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/80d7d1a5
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/80d7d1a5
Branch: refs/heads/branch-1.3
Commit: 80d7d1a595862b6d9d6a8fbbc5a554ad17a37381
Parents: 286394b
Author: Vincent <vi...@salesforce.com>
Authored: Wed May 10 18:01:49 2017 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Thu May 11 13:23:33 2017 -0700
----------------------------------------------------------------------
.../hadoop/hbase/protobuf/ProtobufUtil.java | 45 ++++++++++----------
1 file changed, 23 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/80d7d1a5/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 5a78601..5461bd3 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;
@@ -458,7 +459,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());
@@ -556,7 +557,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.
@@ -581,7 +582,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(
@@ -597,23 +598,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);
@@ -654,7 +655,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.
@@ -722,7 +723,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) {
@@ -745,17 +746,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));
@@ -801,7 +802,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) {
@@ -824,16 +825,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));
@@ -862,7 +863,7 @@ public final class ProtobufUtil {
throws IOException {
MutationType type = proto.getMutateType();
assert type == MutationType.INCREMENT || type == MutationType.APPEND : type.name();
- byte[] row = proto.hasRow() ? proto.getRow().toByteArray() : null;
+ byte[] row = proto.hasRow() ? zeroCopyGetBytes(proto.getRow()) : null;
Get get = null;
int cellCount = proto.hasAssociatedCellCount() ? proto.getAssociatedCellCount() : 0;
if (cellCount > 0) {
@@ -887,9 +888,9 @@ public final class ProtobufUtil {
} else {
get = new Get(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");
}