HBASE-17387 Reduce the overhead of exception report in RegionActionResult for multi()

This commit is contained in:
tedyu 2016-12-29 17:54:02 -08:00
parent 7572e96e3a
commit 1c477b2df9
1 changed files with 12 additions and 9 deletions

View File

@ -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());