Index: src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java (revision 1202450) +++ src/main/java/org/apache/hadoop/hbase/zookeeper/ZKAssign.java (working copy) @@ -499,13 +499,13 @@ } if (expectedVersion != -1 && stat.getVersion() != expectedVersion) { - LOG.warn("The node we are trying to delete is not the expected one. " + - "Got a version mismatch"); + LOG.warn("The node " + regionName + " we are trying to delete is not" + + " the expected one. Got a version mismatch"); return false; } if(!ZKUtil.deleteNode(zkw, node, stat.getVersion())) { LOG.warn(zkw.prefix("Attempting to delete " + - "unassigned node in " + expectedState + + "unassigned node " + regionName + " in " + expectedState + " state but after verifying state, we got a version mismatch")); return false; } Index: src/main/java/org/apache/hadoop/hbase/master/handler/SplitRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/master/handler/SplitRegionHandler.java (revision 1202450) +++ src/main/java/org/apache/hadoop/hbase/master/handler/SplitRegionHandler.java (working copy) @@ -87,9 +87,15 @@ this.daughters.get(0), this.daughters.get(1)); // Remove region from ZK try { - ZKAssign.deleteNode(this.server.getZooKeeper(), - this.parent.getEncodedName(), - EventHandler.EventType.RS_ZK_REGION_SPLIT); + + boolean successful = false; + while (!successful) { + // It's possible that the RS tickles in between the reading of the + // znode and the deleting, so it's safe to retry. + successful = ZKAssign.deleteNode(this.server.getZooKeeper(), + this.parent.getEncodedName(), + EventHandler.EventType.RS_ZK_REGION_SPLIT); + } } catch (KeeperException e) { server.abort("Error deleting SPLIT node in ZK for transition ZK node (" + parent.getEncodedName() + ")", e);