You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2019/08/28 01:21:59 UTC

[hbase] branch branch-1.4 updated: HBASE-22935 Fix false warn of stuck MonitoredRPCHandler MonitoredTask

This is an automated email from the ASF dual-hosted git repository.

apurtell pushed a commit to branch branch-1.4
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-1.4 by this push:
     new b78a52d  HBASE-22935 Fix false warn of stuck MonitoredRPCHandler MonitoredTask
b78a52d is described below

commit b78a52d7f6a52e129e914fa7c6f2c33f84caef7d
Author: David Manning <da...@salesforce.com>
AuthorDate: Tue Aug 27 16:58:02 2019 -0700

    HBASE-22935 Fix false warn of stuck MonitoredRPCHandler MonitoredTask
    
    Signed-off-by: Andrew Purtell <ap...@apache.org>
---
 .../hbase/monitoring/MonitoredRPCHandlerImpl.java    |  4 +++-
 .../hadoop/hbase/monitoring/TestTaskMonitor.java     | 20 +++++++++++++-------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
index 08c8c9f..133bfb5 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java
@@ -187,7 +187,9 @@ public class MonitoredRPCHandlerImpl extends MonitoredTaskImpl
       long queueTime) {
     this.methodName = methodName;
     this.params = params;
-    this.rpcStartTime = System.currentTimeMillis();
+    long now = System.currentTimeMillis();
+    this.rpcStartTime = now;
+    setWarnTime(now);
     this.rpcQueueTime = queueTime;
     this.state = State.RUNNING;
   }
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 3cf89a4..022265d 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
@@ -129,16 +129,22 @@ public class TestTaskMonitor {
 
   @Test
   public void testWarnStuckTasks() throws Exception {
-    final int INTERVAL = 1000;
+    final int RPC_WARN_TIME = 1500;
+    final int MONITOR_INTERVAL = 500;
     Configuration conf = new Configuration();
-    conf.setLong(TaskMonitor.RPC_WARN_TIME_KEY, INTERVAL);
-    conf.setLong(TaskMonitor.MONITOR_INTERVAL_KEY, INTERVAL);
+    conf.setLong(TaskMonitor.RPC_WARN_TIME_KEY, RPC_WARN_TIME);
+    conf.setLong(TaskMonitor.MONITOR_INTERVAL_KEY, MONITOR_INTERVAL);
     final TaskMonitor tm = new TaskMonitor(conf);
     MonitoredRPCHandler t = tm.createRPCStatus("test task");
-    long then = EnvironmentEdgeManager.currentTime();
-    t.setRPC("testMethod", new Object[0], then);
-    Thread.sleep(INTERVAL * 2);
-    assertTrue("We did not warn", t.getWarnTime() > then);
+    long beforeSetRPC = EnvironmentEdgeManager.currentTime();
+    assertTrue("Validating initialization assumption", t.getWarnTime() <= beforeSetRPC);
+    Thread.sleep(MONITOR_INTERVAL * 2);
+    t.setRPC("testMethod", new Object[0], beforeSetRPC);
+    long afterSetRPC = EnvironmentEdgeManager.currentTime();
+    Thread.sleep(MONITOR_INTERVAL * 2);
+    assertTrue("Validating no warn after starting RPC", t.getWarnTime() <= afterSetRPC);
+    Thread.sleep(MONITOR_INTERVAL * 2);
+    assertTrue("Validating warn after RPC_WARN_TIME", t.getWarnTime() > afterSetRPC);
     tm.shutdown();
   }