diff --git a/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java b/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java index ef349af..c3935ac 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java +++ b/src/main/java/org/apache/hadoop/hbase/master/BaseScanner.java @@ -589,6 +589,7 @@ abstract class BaseScanner extends Chore implements HConstants { synchronized(scannerLock){ if (isAlive()) { super.interrupt(); + LOG.info("Interrupted"); } } } diff --git a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index bac0efa..5946eee 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -447,6 +447,9 @@ public class HMaster extends Thread implements HConstants, HMasterInterface, if (this.serverManager.numServers() == 0) { startShutdown(); break; + } else { + LOG.debug("Waiting on " + + this.serverManager.getServersToServerInfo().keySet().toString()); } } final HServerAddress root = this.regionManager.getRootRegionLocation(); diff --git a/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java b/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java index d33d25e..71597af 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java +++ b/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java @@ -592,17 +592,8 @@ public class RegionManager implements HConstants { * regions can shut down. */ public void stopScanners() { - if (LOG.isDebugEnabled()) { - LOG.debug("telling root scanner to stop"); - } - rootScannerThread.interruptAndStop(); - if (LOG.isDebugEnabled()) { - LOG.debug("telling meta scanner to stop"); - } - metaScannerThread.interruptAndStop(); - if (LOG.isDebugEnabled()) { - LOG.debug("meta and root scanners notified"); - } + this.rootScannerThread.interruptAndStop(); + this.metaScannerThread.interruptAndStop(); } /** Stop the region assigner */ @@ -1152,7 +1143,8 @@ public class RegionManager implements HConstants { */ public void waitForRootRegionLocation() { synchronized (rootRegionLocation) { - while (!master.isClosed() && rootRegionLocation.get() == null) { + while (!master.getShutdownRequested().get() && + !master.isClosed() && rootRegionLocation.get() == null) { // rootRegionLocation will be filled in when we get an 'open region' // regionServerReport message from the HRegionServer that has been // allocated the ROOT region below. diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index a44663d..9909f2c 100644 --- a/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1121,7 +1121,9 @@ public class HRegionServer implements HConstants, HRegionInterface, public void abort() { this.abortRequested = true; this.reservedSpace.clear(); - LOG.info("Dump of metrics: " + this.metrics.toString()); + if (this.metrics != null) { + LOG.info("Dump of metrics: " + this.metrics.toString()); + } stop(); } diff --git a/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java b/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java index baabc76..280b91d 100644 --- a/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java +++ b/src/main/java/org/apache/hadoop/hbase/util/JVMClusterUtil.java @@ -55,7 +55,12 @@ public class JVMClusterUtil { * to be used. */ public void waitForServerOnline() { - while (!regionServer.isOnline()) { + // The server is marked online after the init method completes inside of + // the HRS#run method. HRS#init can fail for whatever region. In those + // cases, we'll jump out of the run without setting online flag. Check + // stopRequested so we don't wait here a flag that will never be flipped. + while (!this.regionServer.isOnline() && + !this.regionServer.isStopRequested()) { try { Thread.sleep(1000); } catch (InterruptedException e) {