--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java @@ -54,6 +54,7 @@ class ActiveMasterManager extends ZooKeeperListener { private static final Log LOG = LogFactory.getLog(ActiveMasterManager.class); final AtomicBoolean clusterHasActiveMaster = new AtomicBoolean(false); + final AtomicBoolean clusterShutDown = new AtomicBoolean(false); private final ServerName sn; private final Server master; @@ -76,6 +77,13 @@ class ActiveMasterManager extends ZooKeeperListener { @Override public void nodeDeleted(String path) { + + // See if we get any cluster shut down notification. + // The watcher was set by ClusterStatusTracker earlier. + if(path.equals(watcher.clusterStateZNode) && !master.isStopped()) { + clusterShutDown.set(true); + } + handle(path); } @@ -220,7 +228,7 @@ class ActiveMasterManager extends ZooKeeperListener { LOG.debug("Interrupted waiting for master to die", e); } } - if (!clusterStatusTracker.isClusterUp()) { + if (clusterShutDown.get() && !clusterStatusTracker.isClusterUp()) { this.master.stop( "Cluster went down before this master became active"); }