diff --git a/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java b/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java index e138199..464c07e 100644 --- a/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java +++ b/src/main/java/org/apache/hadoop/hbase/io/HbaseObjectWritable.java @@ -98,6 +98,7 @@ import org.apache.hadoop.io.Writable; import org.apache.hadoop.io.WritableFactories; import org.apache.hadoop.io.WritableUtils; +import com.google.protobuf.CodedOutputStream; import com.google.protobuf.Message; import com.google.protobuf.RpcController; @@ -423,6 +424,12 @@ public class HbaseObjectWritable implements Writable, WritableWithSize, Configur // one extra class code for writable instance. return r.getWritableSize() + size + Bytes.SIZEOF_BYTE; } + if (instance instanceof Message) { + int pbSize = ((Message)instance).getSerializedSize(); + return CodedOutputStream.computeRawVarint32Size(pbSize) + + pbSize + + 4 + instance.getClass().getName().length(); + } return 0L; // no hint is the default. } /** diff --git a/src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java b/src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java index be91fa8..e9c2ae1 100644 --- a/src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java +++ b/src/main/java/org/apache/hadoop/hbase/ipc/HBaseServer.java @@ -347,9 +347,9 @@ public abstract class HBaseServer implements RpcServer { b.setStackTrace(error); builder.setException(b.build()); } else { - ByteString.Output out = ByteString.newOutput(size); - result.write(out); - builder.setResponse(out.toByteString()); + ByteString.Output bsOut = ByteString.newOutput(size); + result.write(new DataOutputStream(bsOut)); + builder.setResponse(bsOut.toByteString()); } builder.build().writeDelimitedTo( DataOutputOutputStream.constructOutputStream(out));