From 1c477b2df9f3cb10063d66d8f14ba9eb83bf9f4c Mon Sep 17 00:00:00 2001 From: tedyu Date: Thu, 29 Dec 2016 17:54:02 -0800 Subject: [PATCH] HBASE-17387 Reduce the overhead of exception report in RegionActionResult for multi() --- .../hbase/regionserver/RSRpcServices.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) 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 27fef8dbaf9..f550267b287 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 @@ -719,8 +719,11 @@ public class RSRpcServices implements HBaseRPCErrorHandler, long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable()); IOException sizeIOE = null; Object lastBlock = null; + ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = ResultOrException.newBuilder(); + boolean hasResultOrException = false; for (ClientProtos.Action action : actions.getActionList()) { - ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = null; + hasResultOrException = false; + resultOrExceptionBuilder.clear(); try { Result r = null; @@ -749,8 +752,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler, // use it for the response. // // This will create a copy in the builder. - resultOrExceptionBuilder = ResultOrException.newBuilder(). - setException(ResponseConverter.buildException(sizeIOE)); + hasResultOrException = true; + resultOrExceptionBuilder.setException(ResponseConverter.buildException(sizeIOE)); resultOrExceptionBuilder.setIndex(action.getIndex()); builder.addResultOrException(resultOrExceptionBuilder.build()); if (cellScanner != null) { @@ -774,7 +777,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler, } } } else if (action.hasServiceCall()) { - resultOrExceptionBuilder = ResultOrException.newBuilder(); + hasResultOrException = true; try { com.google.protobuf.Message result = execServiceOnRegion(region, action.getServiceCall()); @@ -832,8 +835,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler, pbResult = ProtobufUtil.toResult(r); } lastBlock = addSize(context, r, lastBlock); - resultOrExceptionBuilder = - ClientProtos.ResultOrException.newBuilder().setResult(pbResult); + hasResultOrException = true; + resultOrExceptionBuilder.setResult(pbResult); } // Could get to here and there was no result and no exception. Presumes we added // a Put or Delete to the collecting Mutations List for adding later. In this @@ -841,10 +844,10 @@ public class RSRpcServices implements HBaseRPCErrorHandler, // down in the doBatchOp method call rather than up here. } catch (IOException ie) { rpcServer.getMetrics().exception(ie); - resultOrExceptionBuilder = ResultOrException.newBuilder(). - setException(ResponseConverter.buildException(ie)); + hasResultOrException = true; + resultOrExceptionBuilder.setException(ResponseConverter.buildException(ie)); } - if (resultOrExceptionBuilder != null) { + if (hasResultOrException) { // Propagate index. resultOrExceptionBuilder.setIndex(action.getIndex()); builder.addResultOrException(resultOrExceptionBuilder.build());