Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java (revision 1357457) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java (working copy) @@ -69,6 +69,14 @@ st.execute(this.server, this.server); this.server.getMetrics().incrementSplitSuccessCount(); } catch (Exception e) { + if (this.server.isStopping() || this.server.isStopped()) { + LOG.info( + "Skip rollback/cleanup of failed split of " + + parent.getRegionNameAsString() + + " because server is stopping=" + this.server.isStopping() + + " or stopped=" + this.server.isStopped(), e); + return; + } try { LOG.info("Running rollback/cleanup of failed split of " + parent.getRegionNameAsString() + "; " + e.getMessage(), e); Index: hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java (revision 1357457) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java (working copy) @@ -136,7 +136,8 @@ assertTrue(test(con, tableName, lastRow, server)); // 4. phase III - split.transitionZKNode(server, regions.getFirst(), regions.getSecond()); + split.transitionZKNode(server, server, regions.getFirst(), + regions.getSecond()); assertTrue(test(con, tableName, firstRow, server)); assertTrue(test(con, tableName, lastRow, server)); } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (revision 1357457) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java (working copy) @@ -342,11 +342,6 @@ boolean stopping = services != null && services.isStopping(); // TODO: Is this check needed here? if (stopped || stopping) { - // add 2nd daughter first (see HBASE-4335) - MetaEditor.addDaughter(server.getCatalogTracker(), - b.getRegionInfo(), services.getServerName()); - MetaEditor.addDaughter(server.getCatalogTracker(), - a.getRegionInfo(), services.getServerName()); LOG.info("Not opening daughters " + b.getRegionInfo().getRegionNameAsString() + " and " + @@ -397,7 +392,8 @@ * @param a second daughter region * @throws IOException If thrown, transaction failed. Call {@link #rollback(Server, RegionServerServices)} */ - /* package */void transitionZKNode(final Server server, HRegion a, HRegion b) + /* package */void transitionZKNode(final Server server, + final RegionServerServices services, HRegion a, HRegion b) throws IOException { // Tell master about split by updating zk. If we fail, abort. if (server != null && server.getZooKeeper() != null) { @@ -421,7 +417,8 @@ parent.getRegionInfo(), a.getRegionInfo(), b.getRegionInfo(), server.getServerName(), this.znodeVersion); spins++; - } while (this.znodeVersion != -1); + } while (this.znodeVersion != -1 && !server.isStopped() + && !services.isStopping()); } catch (Exception e) { if (e instanceof InterruptedException) { Thread.currentThread().interrupt(); @@ -455,7 +452,7 @@ throws IOException { PairOfSameType regions = createDaughters(server, services); openDaughters(server, services, regions.getFirst(), regions.getSecond()); - transitionZKNode(server, regions.getFirst(), regions.getSecond()); + transitionZKNode(server, services, regions.getFirst(), regions.getSecond()); return regions; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (revision 1357457) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -872,6 +872,11 @@ this.hbaseMaster = null; } this.leases.close(); + + if (!killed) { + join(); + } + try { deleteMyEphemeralNode(); } catch (KeeperException e) { @@ -884,9 +889,6 @@ LOG.info("stopping server " + this.serverNameFromMasterPOV + "; zookeeper connection closed."); - if (!killed) { - join(); - } LOG.info(Thread.currentThread().getName() + " exiting"); } @@ -1634,6 +1636,7 @@ public void postOpenDeployTasks(final HRegion r, final CatalogTracker ct, final boolean daughter) throws KeeperException, IOException { + checkOpen(); LOG.info("Post open deploy tasks for region=" + r.getRegionNameAsString() + ", daughter=" + daughter); // Do checks to see if we need to compact (references or too many files)