Index: src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java =================================================================== --- src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (revision 673499) +++ src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (working copy) @@ -907,15 +907,8 @@ } void closeRegion(final HRegionInfo hri, final boolean reportWhenCompleted) - throws IOException { - this.lock.writeLock().lock(); - HRegion region = null; - try { - region = onlineRegions.remove(Bytes.mapKey(hri.getRegionName())); - } finally { - this.lock.writeLock().unlock(); - } - + throws IOException { + HRegion region = this.removeFromOnlineRegions(hri); if (region != null) { region.close(); if(reportWhenCompleted) { @@ -1329,6 +1322,23 @@ } return result; } + + /** + * This method removes HRegion corresponding to hri from the Map of onlineRegions. + * + * @param hri the HRegionInfo corresponding to the HRegion to-be-removed. + * @return the removed HRegion, or null if the HRegion was not in onlineRegions. + */ + HRegion removeFromOnlineRegions(HRegionInfo hri) { + this.lock.writeLock().lock(); + HRegion toReturn = null; + try { + toReturn = onlineRegions.remove(Bytes.mapKey(hri.getRegionName())); + } finally { + this.lock.writeLock().unlock(); + } + return toReturn; + } /** * @return A new Map of online regions sorted by region size with the first Index: src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java =================================================================== --- src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (revision 673499) +++ src/java/org/apache/hadoop/hbase/regionserver/CompactSplitThread.java (working copy) @@ -159,6 +159,9 @@ // NOTE: there is no need for retry logic here. HTable does it for us. oldRegionInfo.setOffline(true); oldRegionInfo.setSplit(true); + // Inform the HRegionServer that the parent HRegion is no-longer online. + this.server.removeFromOnlineRegions(oldRegionInfo); + BatchUpdate update = new BatchUpdate(oldRegionInfo.getRegionName()); update.put(COL_REGIONINFO, Writables.getBytes(oldRegionInfo)); update.put(COL_SPLITA, Writables.getBytes(newRegions[0].getRegionInfo()));