Index: hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java (revision 1520456) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java (working copy) @@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.IOException; import java.net.InetSocketAddress; @@ -39,7 +40,6 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ClusterStatus; import org.apache.hadoop.hbase.HBaseIOException; -import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HConstants; @@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.MiniHBaseCluster; import org.apache.hadoop.hbase.NamespaceDescriptor; import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.MetaScanner; @@ -63,11 +64,13 @@ import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.ZKAssign; +import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; +import org.apache.zookeeper.KeeperException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; -import static org.junit.Assert.fail; @Category(MediumTests.class) @@ -267,14 +270,17 @@ // Check when a RS stops, the regions get assigned to their secondary/tertiary killRandomServerAndVerifyAssignment(); - + // also verify that the AssignmentVerificationReport has the correct information reports = rp.verifyRegionPlacement(false); report = reports.get(0); assertTrue(report.getRegionsWithoutValidFavoredNodes().size() == 0); assertTrue(report.getNonFavoredAssignedRegions().size() == 0); assertTrue(report.getTotalFavoredAssignments() >= REGION_NUM); - assertTrue(report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.PRIMARY) > 0 && + assertTrue(report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.PRIMARY) > 0); + assertTrue("secondary " + + report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.SECONDARY) + " tertiary " + + report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.TERTIARY), (report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.SECONDARY) > 0 || report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.TERTIARY) > 0)); assertTrue((report.getNumRegionsOnFavoredNodeByPosition(FavoredNodesPlan.Position.PRIMARY) + @@ -284,7 +290,7 @@ } private void killRandomServerAndVerifyAssignment() - throws IOException, InterruptedException { + throws IOException, InterruptedException, KeeperException { ClusterStatus oldStatus = TEST_UTIL.getHBaseCluster().getClusterStatus(); ServerName servers[] = oldStatus.getServers().toArray(new ServerName[10]); ServerName serverToKill = null; @@ -296,6 +302,14 @@ // kill a random non-meta server carrying at least one region killIndex = random.nextInt(servers.length); serverToKill = TEST_UTIL.getHBaseCluster().getRegionServer(killIndex).getServerName(); + Collection regs = + TEST_UTIL.getHBaseCluster().getRegionServer(killIndex).getOnlineRegionsLocalContext(); + for (HRegion r : regs) { + if (r.getRegionInfo().getTableName().getNamespaceAsString() + .equals(NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR)) { + continue; + } + } } while (ServerName.isSameHostnameAndPort(metaServer, serverToKill) || TEST_UTIL.getHBaseCluster().getRegionServer(killIndex).getNumberOfOnlineRegions() == 0); LOG.debug("Stopping RS " + serverToKill); @@ -317,10 +331,14 @@ int curr = TEST_UTIL.getHBaseCluster().getMaster().assignmentManager.getNumRegionsOpened(); while (curr - orig < regionsToVerify.size()) { LOG.debug("Waiting for " + regionsToVerify.size() + " to come online " + - " Current #regions " + curr + " Original #regions " + orig); + " Current #regions " + curr + " Original #regions " + orig); Thread.sleep(200); curr = TEST_UTIL.getHBaseCluster().getMaster().assignmentManager.getNumRegionsOpened(); } + ZooKeeperWatcher zkw = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(), "testRegionPlacement", + null); + ZKAssign.blockUntilNoRIT(zkw); + zkw.close(); // now verify for (Map.Entry> entry : regionsToVerify.entrySet()) { ServerName newDestination = TEST_UTIL.getHBaseCluster().getMaster()