From 2f11ff68fe7eec92cc2fca9d2d573427a2e25148 Mon Sep 17 00:00:00 2001 From: chenheng Date: Fri, 29 Jan 2016 16:31:38 +0800 Subject: [PATCH] HBASE-15167 Deadlock in TestNamespaceAuditor.testRegionOperations on 1.1 --- .../hbase/namespace/TestNamespaceAuditor.java | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java index 22fe916..561b1e4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java @@ -69,6 +69,8 @@ import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost; +import org.apache.hadoop.hbase.regionserver.Store; +import org.apache.hadoop.hbase.regionserver.StoreFile; import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.util.Bytes; @@ -455,12 +457,13 @@ public class TestNamespaceAuditor { assertEquals(1, stateInfo.getTables().size()); assertEquals(1, stateInfo.getRegionCount()); restartMaster(); - ADMIN.split(tableOne, Bytes.toBytes("500")); + HRegion actualRegion = UTIL.getHBaseCluster().getRegions(tableOne).get(0); - CustomObserver observer = - (CustomObserver) actualRegion.getCoprocessorHost().findCoprocessor( - CustomObserver.class.getName()); + CustomObserver observer = (CustomObserver) actualRegion.getCoprocessorHost().findCoprocessor( + CustomObserver.class.getName()); assertNotNull(observer); + + ADMIN.split(tableOne, Bytes.toBytes("500")); observer.postSplit.await(); assertEquals(2, ADMIN.getTableRegions(tableOne).size()); actualRegion = UTIL.getHBaseCluster().getRegions(tableOne).get(0); @@ -468,10 +471,13 @@ public class TestNamespaceAuditor { (CustomObserver) actualRegion.getCoprocessorHost().findCoprocessor( CustomObserver.class.getName()); assertNotNull(observer); - ADMIN.split( - tableOne, - getSplitKey(actualRegion.getRegionInfo().getStartKey(), actualRegion.getRegionInfo() - .getEndKey())); + + //Before we go on split, we should remove all reference store files. + ADMIN.compact(tableOne); + observer.postCompact.await(); + + ADMIN.split(tableOne, getSplitKey(actualRegion.getRegionInfo().getStartKey(), + actualRegion.getRegionInfo().getEndKey())); observer.postSplit.await(); // Make sure no regions have been added. List hris = ADMIN.getTableRegions(tableOne); @@ -552,6 +558,7 @@ public class TestNamespaceAuditor { public static class CustomObserver extends BaseRegionObserver { volatile CountDownLatch postSplit; volatile CountDownLatch preSplitBeforePONR; + volatile CountDownLatch postCompact; @Override public void postCompleteSplit(ObserverContext ctx) @@ -560,15 +567,23 @@ public class TestNamespaceAuditor { } @Override + public void postCompact(ObserverContext e, + Store store, StoreFile resultFile) throws IOException { + postCompact.countDown(); + } + + @Override public void preSplitBeforePONR(ObserverContext ctx, byte[] splitKey, List metaEntries) throws IOException { preSplitBeforePONR.countDown(); } + @Override public void start(CoprocessorEnvironment e) throws IOException { postSplit = new CountDownLatch(1); preSplitBeforePONR = new CountDownLatch(1); + postCompact = new CountDownLatch(1); } } -- 2.5.4 (Apple Git-61)