Index: hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.java =================================================================== --- hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.java (revision 1593490) +++ hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapper.java (working copy) @@ -25,4 +25,5 @@ int getReplicationQueueLength(); int getPriorityQueueLength(); int getNumOpenConnections(); + int getActiveRpcHandlerCount(); } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java (revision 1593490) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java (working copy) @@ -89,4 +89,9 @@ public int getReplicationQueueLength() { return 0; } + + @Override + public int getActiveRpcHandlerCount() { + return executor.getActiveCount(); + } } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java (revision 1593490) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java (working copy) @@ -21,6 +21,7 @@ import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -90,7 +91,7 @@ final BlockingQueue replicationQueue; private volatile boolean running = false; private final List handlers = Lists.newArrayList(); - + private AtomicInteger activeHandlerCount = new AtomicInteger(0); /** What level a high priority call is at. */ private final int highPriorityLevel; @@ -204,13 +205,23 @@ return replicationQueue == null ? 0 : replicationQueue.size(); } + @Override + public int getActiveRpcHandlerCount() { + return 0; + } + private void consumerLoop(BlockingQueue myQueue) { boolean interrupted = false; try { while (running) { try { CallRunner task = myQueue.take(); - task.run(); + try { + activeHandlerCount.incrementAndGet(); + task.run(); + } finally { + activeHandlerCount.decrementAndGet(); + } } catch (InterruptedException e) { interrupted = true; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcScheduler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcScheduler.java (revision 1593490) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcScheduler.java (working copy) @@ -67,4 +67,7 @@ /** Retrieves length of the replication queue for metrics. */ int getReplicationQueueLength(); + + /** Retrieves the number of active handler. */ + int getActiveRpcHandlerCount(); } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperImpl.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperImpl.java (revision 1593490) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperImpl.java (working copy) @@ -37,8 +37,7 @@ @Override public int getGeneralQueueLength() { - if (this.server == null - || this.server.getScheduler() == null) { + if (this.server == null || this.server.getScheduler() == null) { return 0; } return server.getScheduler().getGeneralQueueLength(); @@ -46,8 +45,7 @@ @Override public int getReplicationQueueLength() { - if (this.server == null - || this.server.getScheduler() == null) { + if (this.server == null || this.server.getScheduler() == null) { return 0; } return server.getScheduler().getReplicationQueueLength(); @@ -55,8 +53,7 @@ @Override public int getPriorityQueueLength() { - if (this.server == null - || this.server.getScheduler() == null) { + if (this.server == null || this.server.getScheduler() == null) { return 0; } return server.getScheduler().getPriorityQueueLength(); @@ -69,4 +66,12 @@ } return server.connectionList.size(); } + + @Override + public int getActiveRpcHandlerCount() { + if (this.server == null || this.server.getScheduler() == null) { + return 0; + } + return server.getScheduler().getActiveRpcHandlerCount(); + } } Index: hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperStub.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperStub.java (revision 1593490) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperStub.java (working copy) @@ -43,4 +43,9 @@ public int getNumOpenConnections() { return 105; } + + @Override + public int getActiveRpcHandlerCount() { + return 100; + } }