Index: src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java =============================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java 2011-07-20 04:46:10.000000000 +0800 +++ src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java 2011-10-11 13:51:15.000000000 +0800 @@ -218,17 +218,21 @@ createSplitDir(this.parent.getFilesystem(), this.splitdir); this.journal.add(JournalEntry.CREATE_SPLIT_DIR); - List hstoreFilesToSplit = this.parent.close(false); - if (hstoreFilesToSplit == null) { - // The region was closed by a concurrent thread. We can't continue - // with the split, instead we must just abandon the split. If we - // reopen or split this could cause problems because the region has - // probably already been moved to a different server, or is in the - // process of moving to a different server. - throw new IOException("Failed to close region: already closed by " + - "another thread"); + List hstoreFilesToSplit = null; + try{ + hstoreFilesToSplit = this.parent.close(false); + if (hstoreFilesToSplit == null) { + // The region was closed by a concurrent thread. We can't continue + // with the split, instead we must just abandon the split. If we + // reopen or split this could cause problems because the region has + // probably already been moved to a different server, or is in the + // process of moving to a different server. + throw new IOException("Failed to close region: already closed by " + + "another thread"); + } + } finally { + this.journal.add(JournalEntry.CLOSED_PARENT_REGION); } - this.journal.add(JournalEntry.CLOSED_PARENT_REGION); if (!testing) { services.removeFromOnlineRegions(this.parent.getRegionInfo().getEncodedName());