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

sershe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new d9491c0  HBASE-22360 Abort timer doesn't set when abort is called 
during graceful shutdown process
d9491c0 is described below

commit d9491c0b65aa1031df8d8f2a3df6f7ef51e56386
Author: Bahram Chehrazy <[email protected]>
AuthorDate: Tue May 7 15:48:59 2019 -0700

    HBASE-22360 Abort timer doesn't set when abort is called during graceful 
shutdown process
    
    Signed-off-by: Sergey Shelukhin <[email protected]>
---
 .../hadoop/hbase/regionserver/HRegionServer.java   | 38 +++++++++++++---------
 1 file changed, 23 insertions(+), 15 deletions(-)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 68652af..2b1ea50 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -537,6 +537,9 @@ public class HRegionServer extends HasThread implements
   /**regionserver codec list **/
   public static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";
 
+  // A timer to shutdown the process if abort takes too long
+  private Timer abortMonitor;
+
   /**
    * Starts a HRegionServer at the default location
    */
@@ -1047,21 +1050,6 @@ public class HRegionServer extends HasThread implements
       }
     }
 
-    if (abortRequested) {
-      Timer abortMonitor = new Timer("Abort regionserver monitor", true);
-      TimerTask abortTimeoutTask = null;
-      try {
-        abortTimeoutTask =
-            Class.forName(conf.get(ABORT_TIMEOUT_TASK, 
SystemExitWhenAbortTimeout.class.getName()))
-                
.asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();
-      } catch (Exception e) {
-        LOG.warn("Initialize abort timeout task failed", e);
-      }
-      if (abortTimeoutTask != null) {
-        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, 
DEFAULT_ABORT_TIMEOUT));
-      }
-    }
-
     if (this.leases != null) {
       this.leases.closeAfterLeasesExpire();
     }
@@ -2448,6 +2436,8 @@ public class HRegionServer extends HasThread implements
     } catch (Throwable t) {
       LOG.warn("Unable to report fatal error to master", t);
     }
+
+    scheduleAbortTimer();
     // shutdown should be run as the internal user
     stop(reason, true, null);
   }
@@ -2485,6 +2475,24 @@ public class HRegionServer extends HasThread implements
   protected void sendShutdownInterrupt() {
   }
 
+  // Limits the time spent in the shutdown process.
+  private void scheduleAbortTimer() {
+    if (this.abortMonitor == null) {
+      this.abortMonitor = new Timer("Abort regionserver monitor", true);
+      TimerTask abortTimeoutTask = null;
+      try {
+        abortTimeoutTask =
+          Class.forName(conf.get(ABORT_TIMEOUT_TASK, 
SystemExitWhenAbortTimeout.class.getName()))
+            
.asSubclass(TimerTask.class).getDeclaredConstructor().newInstance();
+      } catch (Exception e) {
+        LOG.warn("Initialize abort timeout task failed", e);
+      }
+      if (abortTimeoutTask != null) {
+        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, 
DEFAULT_ABORT_TIMEOUT));
+      }
+    }
+  }
+
   /**
    * Wait on all threads to finish. Presumption is that all closes and stops
    * have already been called.

Reply via email to