Index: src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java (revision 1173968) +++ src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java (working copy) @@ -20,13 +20,12 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; +import java.util.Map; import org.apache.hadoop.hbase.catalog.CatalogTracker; import org.apache.hadoop.hbase.ipc.RpcServer; import org.apache.hadoop.hbase.regionserver.wal.HLog; import org.apache.zookeeper.KeeperException; -import java.util.Set; -import java.util.concurrent.ConcurrentSkipListMap; /** * Services provided by {@link HRegionServer} @@ -77,6 +76,6 @@ * Get the regions that are currently being opened or closed in the RS * @return map of regions in transition in this RS */ - public ConcurrentSkipListMap getRegionsInTransitionInRS(); + public Map getRegionsInTransitionInRS(); } Index: src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (revision 1173968) +++ src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (working copy) @@ -257,21 +257,29 @@ // make sure the region came back assertEquals(hr1.getOnlineRegion(hri.getEncodedNameAsBytes()), null); - // remove the block and reset the boolean hr1.getRegionsInTransitionInRS().remove(hri.getEncodedNameAsBytes()); reopenEventProcessed.set(false); + + // now try moving a region when there is no region in transition. + hri = getNonMetaRegion(hr1.getOnlineRegions()); - // move the region again, but this time it will work + openListener = + new ReopenEventListener(hri.getRegionNameAsString(), + reopenEventProcessed, EventType.RS_ZK_REGION_OPENED); + + cluster.getMaster().executorService. + registerListener(EventType.RS_ZK_REGION_OPENED, openListener); + TEST_UTIL.getHBaseAdmin().move(hri.getEncodedNameAsBytes(), - Bytes.toBytes(hr1.getServerName().toString())); + Bytes.toBytes(hr0.getServerName().toString())); while (!reopenEventProcessed.get()) { Threads.sleep(100); } // make sure the region has moved from the original RS - assertTrue(hr0.getOnlineRegion(hri.getEncodedNameAsBytes()) == null); + assertTrue(hr1.getOnlineRegion(hri.getEncodedNameAsBytes()) == null); }