From 7d38e6126af747fd29863c1c1439c90481efec3c Mon Sep 17 00:00:00 2001 From: tedyu Date: Tue, 28 Feb 2017 07:44:35 -0800 Subject: [PATCH] HBASE-17673 Monitored RPC Handler not shown in the WebUI (Allan Yang) --- .../hadoop/hbase/monitoring/TaskMonitor.java | 12 +++++++++-- .../hbase/monitoring/TestTaskMonitor.java | 21 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java index c8e0a396d23..53db6a9fba5 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/TaskMonitor.java @@ -53,6 +53,7 @@ public class TaskMonitor { private static TaskMonitor instance; private CircularFifoBuffer tasks = new CircularFifoBuffer(MAX_TASKS); + private List rpcTasks = Lists.newArrayList(); /** * Get singleton instance. @@ -88,7 +89,7 @@ public class TaskMonitor { new Class[] { MonitoredRPCHandler.class }, new PassthroughInvocationHandler(stat)); TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy); - tasks.add(pair); + rpcTasks.add(pair); return proxy; } @@ -120,13 +121,20 @@ public class TaskMonitor { */ public synchronized List getTasks() { purgeExpiredTasks(); - ArrayList ret = Lists.newArrayListWithCapacity(tasks.size()); + ArrayList ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks + .size()); for (Iterator it = tasks.iterator(); it.hasNext();) { TaskAndWeakRefPair pair = it.next(); MonitoredTask t = pair.get(); ret.add(t.clone()); } + for (Iterator it = rpcTasks.iterator(); + it.hasNext();) { + TaskAndWeakRefPair pair = it.next(); + MonitoredTask t = pair.get(); + ret.add(t.clone()); + } return ret; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java index ff9bd575589..d09b1d1059f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java @@ -100,6 +100,27 @@ public class TestTaskMonitor { assertEquals("task 10", tm.getTasks().get(0).getDescription()); } + @Test + public void testDoNotPurgeRPCTask() throws Exception { + int RPCTaskNums = 10; + for(int i = 0; i < RPCTaskNums; i++) { + TaskMonitor.get().createRPCStatus("PRCTask" + i); + } + for(int i = 0; i < TaskMonitor.MAX_TASKS; i++) { + TaskMonitor.get().createStatus("otherTask" + i); + } + int remainRPCTask = 0; + for(MonitoredTask task :TaskMonitor.get().getTasks()) { + if(task instanceof MonitoredRPCHandler) { + remainRPCTask++; + } + } + assertEquals("RPC Tasks have been purged!", RPCTaskNums, remainRPCTask); + + } + + + }