diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java index d8ae3ba..429bb9f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java @@ -124,6 +124,13 @@ public class SimpleRpcScheduler extends RpcScheduler { float callQueuesHandlersFactor = conf.getFloat(CALL_QUEUE_HANDLER_FACTOR_CONF_KEY, 0); int numCallQueues = Math.max(1, (int)Math.round(handlerCount * callQueuesHandlersFactor)); + // normalize handlerCount to keep back-end's capacity equal for callQueue + if (callQueuesHandlersFactor > 0 && numCallQueues > 1) { + int handlerPerQueue = (int) Math.ceil(1 / callQueuesHandlersFactor); + handlerCount = numCallQueues * handlerPerQueue; + LOG.warn("normalize handlerCounter = " + handlerCount + + " to keep handlers distributed among callQueues(" + numCallQueues + ") evenly"); + } LOG.info("Using " + callQueueType + " as user call queue, count=" + numCallQueues);