HBASE-14897 TestTableLockManager.testReapAllTableLocks is flakey (cherry picked from commit 47082579a85fae1b3f7156963609819369b353d8) Signed-off-by: Sean Busbey <bus...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/dacaaea0 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/dacaaea0 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/dacaaea0 Branch: refs/heads/branch-1.2 Commit: dacaaea0f634e8330d01e2fcd267cf38255e2969 Parents: ef847f8 Author: chenheng <chenh...@apache.org> Authored: Tue Dec 1 10:31:00 2015 +0800 Committer: Sean Busbey <bus...@apache.org> Committed: Tue Feb 20 09:22:00 2018 -0600 ---------------------------------------------------------------------- .../hbase/master/TestTableLockManager.java | 32 +++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/dacaaea0/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java index 67806c5..16a6450 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestTableLockManager.java @@ -42,7 +42,7 @@ import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.hadoop.hbase.testclassification.LargeTests; +import org.apache.hadoop.hbase.InterProcessLock; import org.apache.hadoop.hbase.NotServingRegionException; import org.apache.hadoop.hbase.ScheduledChore; import org.apache.hadoop.hbase.ServerName; @@ -55,6 +55,7 @@ import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment; import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.exceptions.LockTimeoutException; import org.apache.hadoop.hbase.regionserver.HRegion; +import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.LoadTestTool; import org.apache.hadoop.hbase.util.StoppableImplementation; @@ -130,7 +131,7 @@ public class TestTableLockManager { HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); master.getMasterCoprocessorHost().load(TestAlterAndDisableMasterObserver.class, - 0, TEST_UTIL.getConfiguration()); + 0, TEST_UTIL.getConfiguration()); ExecutorService executor = Executors.newFixedThreadPool(2); Future<Object> alterTableFuture = executor.submit(new Callable<Object>() { @@ -234,6 +235,23 @@ public class TestTableLockManager { } + public class TableLockCounter implements InterProcessLock.MetadataHandler { + + private int lockCount = 0; + + @Override + public void handleMetadata(byte[] metadata) { + lockCount++; + } + + public void reset() { + lockCount = 0; + } + + public int getLockCount() { + return lockCount; + } + } @Test(timeout = 600000) public void testReapAllTableLocks() throws Exception { @@ -258,7 +276,7 @@ public class TestTableLockManager { public Void call() throws Exception { writeLocksAttempted.countDown(); lockManager.writeLock(TableName.valueOf(table), - "testReapAllTableLocks").acquire(); + "testReapAllTableLocks").acquire(); writeLocksObtained.countDown(); return null; } @@ -269,9 +287,15 @@ public class TestTableLockManager { writeLocksObtained.await(); writeLocksAttempted.await(); + TableLockCounter counter = new TableLockCounter(); + do { + counter.reset(); + lockManager.visitAllLocks(counter); + Thread.sleep(10); + } while (counter.getLockCount() != 10); + //now reap all table locks lockManager.reapWriteLocks(); - TEST_UTIL.getConfiguration().setInt(TableLockManager.TABLE_WRITE_LOCK_TIMEOUT_MS, 0); TableLockManager zeroTimeoutLockManager = TableLockManager.createTableLockManager( TEST_UTIL.getConfiguration(), TEST_UTIL.getZooKeeperWatcher(), serverName);