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 b73e72b397d..eabf5a5e274 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 @@ -154,35 +154,6 @@ public final class ProtobufUtil { private final static Map> PRIMITIVES = new HashMap>(); - - /** - * Many results are simple: no cell, exists true or false. To save on object creations, - * we reuse them across calls. - */ - private final static Cell[] EMPTY_CELL_ARRAY = new Cell[]{}; - private final static Result EMPTY_RESULT = Result.create(EMPTY_CELL_ARRAY); - private final static Result EMPTY_RESULT_EXISTS_TRUE = Result.create(null, true); - private final static Result EMPTY_RESULT_EXISTS_FALSE = Result.create(null, false); - - private final static ClientProtos.Result EMPTY_RESULT_PB; - private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_TRUE; - private final static ClientProtos.Result EMPTY_RESULT_PB_EXISTS_FALSE; - - static { - ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder(); - - builder.setExists(true); - EMPTY_RESULT_PB_EXISTS_TRUE = builder.build(); - - builder.clear(); - builder.setExists(false); - EMPTY_RESULT_PB_EXISTS_FALSE = builder.build(); - - builder.clear(); - builder.setAssociatedCellCount(0); - EMPTY_RESULT_PB = builder.build(); - } - /** * Dynamic class loader to load filter/comparators */ @@ -1112,20 +1083,16 @@ public final class ProtobufUtil { * @return the converted protocol buffer Result */ public static ClientProtos.Result toResult(final Result result) { - if (result.getExists() != null) { - return toResult(result.getExists()); - } - - Cell[] cells = result.rawCells(); - if (cells == null || cells.length == 0) { - return EMPTY_RESULT_PB; - } - ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder(); - for (Cell c : cells) { - builder.addCell(toCell(c)); + Cell [] cells = result.rawCells(); + if (cells != null) { + for (Cell c : cells) { + builder.addCell(toCell(c)); + } + } + if (result.getExists() != null){ + builder.setExists(result.getExists()); } - return builder.build(); } @@ -1136,7 +1103,9 @@ public final class ProtobufUtil { * @return the converted protocol buffer Result */ public static ClientProtos.Result toResult(final boolean existence) { - return existence ? EMPTY_RESULT_PB_EXISTS_TRUE : EMPTY_RESULT_PB_EXISTS_FALSE; + ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder(); + builder.setExists(existence); + return builder.build(); } /** @@ -1147,19 +1116,11 @@ public final class ProtobufUtil { * @return the converted protocol buffer Result */ public static ClientProtos.Result toResultNoData(final Result result) { - if (result.getExists() != null){ - return result.getExists() ? EMPTY_RESULT_PB_EXISTS_TRUE : EMPTY_RESULT_PB_EXISTS_FALSE; - } - - int size = result.size(); - - if (size == 0){ - return EMPTY_RESULT_PB; - } - ClientProtos.Result.Builder builder = ClientProtos.Result.newBuilder(); - builder.setAssociatedCellCount(size); - + builder.setAssociatedCellCount(result.size()); + if (result.getExists() != null){ + builder.setExists(result.getExists()); + } return builder.build(); } @@ -1171,14 +1132,10 @@ public final class ProtobufUtil { */ public static Result toResult(final ClientProtos.Result proto) { if (proto.hasExists()) { - return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE; + return Result.create(null, proto.getExists()); } List values = proto.getCellList(); - if (values.isEmpty()){ - return EMPTY_RESULT; - } - List cells = new ArrayList(values.size()); for (CellProtos.Cell c : values) { cells.add(toCell(c)); @@ -1197,7 +1154,7 @@ public final class ProtobufUtil { public static Result toResult(final ClientProtos.Result proto, final CellScanner scanner) throws IOException { if (proto.hasExists()){ - return proto.getExists() ? EMPTY_RESULT_EXISTS_TRUE : EMPTY_RESULT_EXISTS_FALSE; + return Result.create(null, proto.getExists()); } // TODO: Unit test that has some Cells in scanner and some in the proto. @@ -1211,20 +1168,13 @@ public final class ProtobufUtil { } } List values = proto.getCellList(); - if (cells == null) { - if (values.isEmpty()) { - return EMPTY_RESULT; - } else { - cells = new ArrayList(values.size()); - for (CellProtos.Cell c : values) { - cells.add(toCell(c)); - } - } + if (cells == null) cells = new ArrayList(values.size()); + for (CellProtos.Cell c: values) { + cells.add(toCell(c)); } return Result.create(cells, null); } - /** * Convert a ByteArrayComparable to a protocol buffer Comparator * diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java index 77cd5ee2eef..6dca80c8538 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java @@ -488,6 +488,7 @@ public final class RequestConverter { throws IOException { RegionAction.Builder builder = getRegionActionBuilderWithRegion(regionName); ClientProtos.Action.Builder actionBuilder = ClientProtos.Action.newBuilder(); + MutationProto.Builder mutationBuilder = ClientProtos.MutationProto.newBuilder(); for (Action action: actions) { Row row = action.getAction(); actionBuilder.clear();