Repository: hbase Updated Branches: refs/heads/branch-1 f7c35f8b5 -> 5197640c3 refs/heads/master 948746ce4 -> fb5e6b3f7
HBASE-13179 TestMasterObserver deleteTable is flaky Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/fb5e6b3f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/fb5e6b3f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/fb5e6b3f Branch: refs/heads/master Commit: fb5e6b3f75ad29ffebeaad1fac4c4fdebd69684f Parents: 948746c Author: Matteo Bertozzi <matteo.berto...@cloudera.com> Authored: Mon Mar 9 19:47:27 2015 +0000 Committer: Matteo Bertozzi <matteo.berto...@cloudera.com> Committed: Mon Mar 9 19:47:27 2015 +0000 ---------------------------------------------------------------------- .../hbase/coprocessor/TestMasterObserver.java | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/fb5e6b3f/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java index 61263d6..f5ea748 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.java @@ -77,6 +77,7 @@ public class TestMasterObserver { private static final Log LOG = LogFactory.getLog(TestMasterObserver.class); public static CountDownLatch tableCreationLatch = new CountDownLatch(1); + public static CountDownLatch tableDeletionLatch = new CountDownLatch(1); public static class CPMasterObserver implements MasterObserver { @@ -876,6 +877,7 @@ public class TestMasterObserver { ObserverContext<MasterCoprocessorEnvironment> ctx, TableName tableName) throws IOException { postDeleteTableHandlerCalled = true; + tableDeletionLatch.countDown(); } public boolean wasDeleteTableHandlerCalled() { @@ -1274,7 +1276,7 @@ public class TestMasterObserver { // delete table admin.disableTable(tableName); assertTrue(admin.isTableDisabled(tableName)); - admin.deleteTable(tableName); + deleteTable(admin, tableName); assertFalse("Test table should have been deleted", admin.tableExists(tableName)); // preDeleteTable can't bypass default action. @@ -1357,7 +1359,7 @@ public class TestMasterObserver { assertFalse("No table deleted yet", cp.wasDeleteTableCalled()); assertFalse("Delete table handler should not be called.", cp.wasDeleteTableHandlerCalled()); - admin.deleteTable(tableName); + deleteTable(admin, tableName); assertFalse("Test table should have been deleted", admin.tableExists(tableName)); assertTrue("Coprocessor should have been called on table delete", @@ -1410,7 +1412,7 @@ public class TestMasterObserver { cp.wasRestoreSnapshotCalled()); admin.disableTable(TEST_CLONE); assertTrue(admin.isTableDisabled(tableName)); - admin.deleteTable(TEST_CLONE); + deleteTable(admin, TEST_CLONE); // Test restore operation cp.resetStates(); @@ -1424,7 +1426,7 @@ public class TestMasterObserver { assertTrue("Coprocessor should have been called on snapshot delete", cp.wasDeleteSnapshotCalled()); } finally { - admin.deleteTable(tableName); + deleteTable(admin, tableName); } } @@ -1604,7 +1606,9 @@ public class TestMasterObserver { assertTrue("Coprocessor should be called on region rebalancing", cp.wasBalanceCalled()); } finally { - UTIL.deleteTable(tableName); + Admin admin = UTIL.getHBaseAdmin(); + admin.disableTable(tableName); + deleteTable(admin, tableName); } } @@ -1651,4 +1655,13 @@ public class TestMasterObserver { assertTrue("Coprocessor should be called on table names request", cp.wasGetTableNamesCalled()); } + + private void deleteTable(Admin admin, TableName tableName) throws Exception { + // NOTE: We need a latch because admin is not sync, + // so the postOp coprocessor method may be called after the admin operation returned. + tableDeletionLatch = new CountDownLatch(1); + admin.deleteTable(tableName); + tableDeletionLatch.await(); + tableDeletionLatch = new CountDownLatch(1); + } }