diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java index 49c7f8a..7ed9321 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java @@ -2593,7 +2593,9 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver { " totalTime: " + totalTime); } long requestSize = param.getSerializedSize(); - long responseSize = result.getSerializedSize(); + // Support including the payload size in HBaseRpcController + long responseSize = result.getSerializedSize() + CurCall.get().getResponseCellSize(); + metrics.dequeuedCall(qTime); metrics.processedCall(processingTime); metrics.totalCall(totalTime); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index cd62115..d74d52d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -2259,6 +2259,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, Boolean existence = null; Result r = null; RpcCallContext context = RpcServer.getCurrentCall(); + Object lastBlock = null; quota = getQuotaManager().checkQuota(region, OperationQuota.OperationType.GET); Get clientGet = ProtobufUtil.toGet(get); @@ -2286,12 +2287,12 @@ public class RSRpcServices implements HBaseRPCErrorHandler, builder.setResult(pbr); } else if (r != null) { ClientProtos.Result pbr; - RpcCallContext call = RpcServer.getCurrentCall(); - if (isClientCellBlockSupport(call) && controller instanceof HBaseRpcController - && VersionInfoUtil.hasMinimumVersion(call.getClientVersionInfo(), 1, 3)) { + if (isClientCellBlockSupport(context) && controller instanceof HBaseRpcController + && VersionInfoUtil.hasMinimumVersion(context.getClientVersionInfo(), 1, 3)) { pbr = ProtobufUtil.toResultNoData(r); ((HBaseRpcController) controller).setCellScanner(CellUtil.createCellScanner(r .rawCells())); + lastBlock = addSize(context, r, lastBlock); } else { pbr = ProtobufUtil.toResult(r); } @@ -2520,6 +2521,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler, HBaseRpcController controller = (HBaseRpcController)rpcc; CellScanner cellScanner = controller != null ? controller.cellScanner() : null; OperationQuota quota = null; + RpcCallContext context = RpcServer.getCurrentCall(); + Object lastBlock = null; // Clear scanner so we are not holding on to reference across call. if (controller != null) { controller.setCellScanner(null); @@ -2616,6 +2619,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, builder.setProcessed(processed.booleanValue()); } addResult(builder, r, controller); + lastBlock = addSize(context, r, lastBlock); return builder.build(); } catch (IOException ie) { regionServer.checkFileSystem();