Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (revision 1345814) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (working copy) @@ -228,6 +228,24 @@ return; } + int waitedTimeForMasterInitialized = 0; + while (!server.isStopped() && !services.isInitialized()) { + try { + if (waitedTimeForMasterInitialized == 0) { + LOG.info("Master is not initialized, waiting..."); + } + Thread.sleep(100); + waitedTimeForMasterInitialized += 100; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted", e); + } + } + if (waitedTimeForMasterInitialized > 0) { + LOG.info("Recovery time calculation: waiting on master to be initialized took " + + waitedTimeForMasterInitialized + "ms"); + } + // Clean out anything in regions in transition. Being conservative and // doing after log splitting. Could do some states before -- OPENING? // OFFLINE? -- and then others after like CLOSING that depend on log Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java (revision 1345814) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterServices.java (working copy) @@ -80,4 +80,9 @@ * @return true if master enables ServerShutdownHandler; */ public boolean isServerShutdownHandlerEnabled(); + + /** + * @return true if master is initialized + */ + public boolean isInitialized(); }