Index: src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (revision 1175233) +++ src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (working copy) @@ -311,27 +311,49 @@ // still and the server shutdown fixup of .META. will point to these // regions. this.journal.add(JournalEntry.PONR); - // Open daughters in parallel. - DaughterOpener aOpener = new DaughterOpener(server, services, a); - DaughterOpener bOpener = new DaughterOpener(server, services, b); - aOpener.start(); - bOpener.start(); - try { - aOpener.join(); - bOpener.join(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new IOException("Interrupted " + e.getMessage()); + boolean stopped = server != null && server.isStopped(); + boolean stopping = services != null && services.isStopping(); + if (stopped || stopping) { + MetaEditor.addDaughter(server.getCatalogTracker(), + b.getRegionInfo(), null); + MetaEditor.addDaughter(server.getCatalogTracker(), + a.getRegionInfo(), null); + LOG.info("Not opening daughters " + + b.getRegionInfo().getRegionNameAsString() + + " and " + + a.getRegionInfo().getRegionNameAsString() + + " because stopping=" + stopping + ", stopped=" + stopped); + } else { + // Open daughters in parallel. + DaughterOpener aOpener = new DaughterOpener(server, services, a); + DaughterOpener bOpener = new DaughterOpener(server, services, b); + bOpener.start(); + aOpener.start(); + try { + bOpener.join(); + aOpener.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IOException("Interrupted " + e.getMessage()); + } + if (aOpener.getException() != null) { + throw new IOException("Failed " + + aOpener.getName(), aOpener.getException()); + } + if (bOpener.getException() != null) { + throw new IOException("Failed " + + bOpener.getName(), bOpener.getException()); + } + if (services != null) { + try { + // add 2nd daughter first (see HBASE-4335) + services.postOpenDeployTasks(b, server.getCatalogTracker(), true); + services.postOpenDeployTasks(a, server.getCatalogTracker(), true); + } catch (KeeperException ke) { + throw new IOException(ke); + } + } } - if (aOpener.getException() != null) { - throw new IOException("Failed " + - aOpener.getName(), aOpener.getException()); - } - if (bOpener.getException() != null) { - throw new IOException("Failed " + - bOpener.getName(), bOpener.getException()); - } - // Tell master about split by updating zk. If we fail, abort. if (server != null && server.getZooKeeper() != null) { try { @@ -423,23 +445,10 @@ void openDaughterRegion(final Server server, final RegionServerServices services, final HRegion daughter) throws IOException, KeeperException { - boolean stopped = server != null && server.isStopped(); - boolean stopping = services != null && services.isStopping(); - if (stopped || stopping) { - MetaEditor.addDaughter(server.getCatalogTracker(), - daughter.getRegionInfo(), null); - LOG.info("Not opening daughter " + - daughter.getRegionInfo().getRegionNameAsString() + - " because stopping=" + stopping + ", stopped=" + server.isStopped()); - return; - } HRegionInfo hri = daughter.getRegionInfo(); LoggingProgressable reporter = server == null? null: new LoggingProgressable(hri, server.getConfiguration()); - HRegion r = daughter.openHRegion(reporter); - if (services != null) { - services.postOpenDeployTasks(r, server.getCatalogTracker(), true); - } + daughter.openHRegion(reporter); } static class LoggingProgressable implements CancelableProgressable {