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.