You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by je...@apache.org on 2016/12/07 22:53:38 UTC

hbase git commit: HBASE-15437 Response size calculated in RPCServer for warning tooLarge responses does NOT count CellScanner payload

Repository: hbase
Updated Branches:
  refs/heads/master 6f25f838c -> 75567f828


HBASE-15437 Response size calculated in RPCServer for warning tooLarge responses does NOT count CellScanner payload


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

Branch: refs/heads/master
Commit: 75567f828c3c07204f99dd3d2fbbd1686cebcb26
Parents: 6f25f83
Author: Jerry He <je...@apache.org>
Authored: Wed Dec 7 14:47:10 2016 -0800
Committer: Jerry He <je...@apache.org>
Committed: Wed Dec 7 14:47:10 2016 -0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/ipc/RpcServer.java  |  7 ++++-
 .../hbase/regionserver/RSRpcServices.java       | 27 +++++++++-----------
 2 files changed, 18 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/75567f82/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
----------------------------------------------------------------------
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 8b6379b..96f506f 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
@@ -2659,8 +2659,13 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver {
             " processingTime: " + processingTime +
             " totalTime: " + totalTime);
       }
-      long requestSize = param.getSerializedSize();
+      // Use the raw request call size for now.
+      long requestSize = call.getSize();
       long responseSize = result.getSerializedSize();
+      if (call.isClientCellBlockSupported()) {
+        // Include the payload size in HBaseRpcController
+        responseSize += call.getResponseCellSize();
+      }
 
       metrics.dequeuedCall(qTime);
       metrics.processedCall(processingTime);

http://git-wip-us.apache.org/repos/asf/hbase/blob/75567f82/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
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 07e16c8..7ec4f68 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
@@ -460,22 +460,14 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
     }
   }
 
-  /**
-   * @return True if current call supports cellblocks
-   */
-  private boolean isClientCellBlockSupport() {
-    RpcCallContext context = RpcServer.getCurrentCall();
-    return context != null && context.isClientCellBlockSupported();
-  }
-
   private boolean isClientCellBlockSupport(RpcCallContext context) {
     return context != null && context.isClientCellBlockSupported();
   }
 
   private void addResult(final MutateResponse.Builder builder, final Result result,
-      final HBaseRpcController rpcc) {
+      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {
     if (result == null) return;
-    if (isClientCellBlockSupport()) {
+    if (clientCellBlockSupported) {
       builder.setResult(ProtobufUtil.toResultNoData(result));
       rpcc.setCellScanner(result.cellScanner());
     } else {
@@ -1167,7 +1159,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
    * @return an object that represents the last referenced block from this response.
    */
   Object addSize(RpcCallContext context, Result r, Object lastBlock) {
-    if (context != null && !r.isEmpty()) {
+    if (context != null && r != null && !r.isEmpty()) {
       for (Cell c : r.rawCells()) {
         context.incrementResponseCellSize(CellUtil.estimatedHeapSizeOf(c));
 
@@ -2299,12 +2291,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()));
+          addSize(context, r, null);
         } else {
           pbr = ProtobufUtil.toResult(r);
         }
@@ -2533,6 +2525,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
     HBaseRpcController controller = (HBaseRpcController)rpcc;
     CellScanner cellScanner = controller != null ? controller.cellScanner() : null;
     OperationQuota quota = null;
+    RpcCallContext context = RpcServer.getCurrentCall();
     // Clear scanner so we are not holding on to reference across call.
     if (controller != null) {
       controller.setCellScanner(null);
@@ -2628,7 +2621,11 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
       if (processed != null) {
         builder.setProcessed(processed.booleanValue());
       }
-      addResult(builder, r, controller);
+      boolean clientCellBlockSupported = isClientCellBlockSupport(context);
+      addResult(builder, r, controller, clientCellBlockSupported);
+      if (clientCellBlockSupported) {
+        addSize(context, r, null);
+      }
       return builder.build();
     } catch (IOException ie) {
       regionServer.checkFileSystem();