Repository: hbase Updated Branches: refs/heads/master f3c563fc0 -> 86f4df5f7
HBASE-19836 Fix TestZooKeeper.testLogSplittingAfterMasterRecoveryDueToZKExpiry Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/86f4df5f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/86f4df5f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/86f4df5f Branch: refs/heads/master Commit: 86f4df5f74fc402b560f741e4dcd46ccaffab391 Parents: f3c563f Author: zhangduo <zhang...@apache.org> Authored: Mon Jan 22 15:03:24 2018 +0800 Committer: zhangduo <zhang...@apache.org> Committed: Mon Jan 22 18:32:31 2018 +0800 ---------------------------------------------------------------------- .../org/apache/hadoop/hbase/TestZooKeeper.java | 57 +++++++++----------- 1 file changed, 24 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/86f4df5f/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java index e03a9da..0bdcb3e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java @@ -29,7 +29,6 @@ import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.RegionInfo; -import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; @@ -90,6 +89,7 @@ public class TestZooKeeper { @After public void after() throws Exception { try { + TEST_UTIL.getHBaseCluster().waitForActiveAndReadyMaster(10000); // Some regionserver could fail to delete its znode. // So shutdown could hang. Let's kill them all instead. TEST_UTIL.getHBaseCluster().killAll(); @@ -102,14 +102,14 @@ public class TestZooKeeper { } } - @Test (timeout = 120000) + @Test public void testRegionServerSessionExpired() throws Exception { LOG.info("Starting " + name.getMethodName()); TEST_UTIL.expireRegionServerSession(0); testSanity(name.getMethodName()); } - @Test(timeout = 300000) + @Test public void testMasterSessionExpired() throws Exception { LOG.info("Starting " + name.getMethodName()); TEST_UTIL.expireMasterSession(); @@ -121,7 +121,7 @@ public class TestZooKeeper { * test differs from {@link #testMasterSessionExpired} because here * the master znode will exist in ZK. */ - @Test(timeout = 300000) + @Test public void testMasterZKSessionRecoveryFailure() throws Exception { LOG.info("Starting " + name.getMethodName()); MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); @@ -160,7 +160,7 @@ public class TestZooKeeper { * session. Without the HBASE-6046 fix master always tries to assign all the user regions by * calling retainAssignment. */ - @Test(timeout = 300000) + @Test public void testRegionAssignmentAfterMasterRecoveryDueToZKExpiry() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); cluster.startRegionServer(); @@ -226,51 +226,42 @@ public class TestZooKeeper { * Tests whether the logs are split when master recovers from a expired zookeeper session and an * RS goes down. */ - @Test(timeout = 300000) + @Test public void testLogSplittingAfterMasterRecoveryDueToZKExpiry() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); cluster.startRegionServer(); - HMaster m = cluster.getMaster(); - // now the cluster is up. So assign some regions. - Admin admin = TEST_UTIL.getAdmin(); - Table table = null; - try { + TableName tableName = TableName.valueOf(name.getMethodName()); + byte[] family = Bytes.toBytes("col"); + try (Admin admin = TEST_UTIL.getAdmin()) { byte[][] SPLIT_KEYS = new byte[][] { Bytes.toBytes("1"), Bytes.toBytes("2"), - Bytes.toBytes("3"), Bytes.toBytes("4"), Bytes.toBytes("5") }; - TableDescriptor htd = - TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())) - .addColumnFamily(ColumnFamilyDescriptorBuilder.of("col")).build(); + Bytes.toBytes("3"), Bytes.toBytes("4"), Bytes.toBytes("5") }; + TableDescriptor htd = TableDescriptorBuilder.newBuilder(tableName) + .addColumnFamily(ColumnFamilyDescriptorBuilder.of(family)).build(); admin.createTable(htd, SPLIT_KEYS); - TEST_UTIL.waitUntilNoRegionsInTransition(60000); - table = TEST_UTIL.getConnection().getTable(htd.getTableName()); - Put p; + } + TEST_UTIL.waitUntilNoRegionsInTransition(60000); + HMaster m = cluster.getMaster(); + try (Table table = TEST_UTIL.getConnection().getTable(tableName)) { int numberOfPuts; for (numberOfPuts = 0; numberOfPuts < 6; numberOfPuts++) { - p = new Put(Bytes.toBytes(numberOfPuts)); + Put p = new Put(Bytes.toBytes(numberOfPuts)); p.addColumn(Bytes.toBytes("col"), Bytes.toBytes("ql"), - Bytes.toBytes("value" + numberOfPuts)); + Bytes.toBytes("value" + numberOfPuts)); table.put(p); } - m.getZooKeeper().close(); m.abort("Test recovery from zk session expired", new KeeperException.SessionExpiredException()); assertTrue(m.isStopped()); // Master doesn't recover any more - cluster.getRegionServer(0).abort("Aborting"); + cluster.killRegionServer(TEST_UTIL.getRSForFirstRegionInTable(tableName).getServerName()); // Without patch for HBASE-6046 this test case will always timeout // with patch the test case should pass. - Scan scan = new Scan(); int numberOfRows = 0; - ResultScanner scanner = table.getScanner(scan); - Result[] result = scanner.next(1); - while (result != null && result.length > 0) { - numberOfRows++; - result = scanner.next(1); + try (ResultScanner scanner = table.getScanner(new Scan())) { + while (scanner.next() != null) { + numberOfRows++; + } } - assertEquals("Number of rows should be equal to number of puts.", numberOfPuts, - numberOfRows); - } finally { - if (table != null) table.close(); - admin.close(); + assertEquals("Number of rows should be equal to number of puts.", numberOfPuts, numberOfRows); } }