Repository: hbase Updated Branches: refs/heads/HBASE-14614 4ab52f2c1 -> 61ed02691
Fix broke unit test. Use nice facility I found in procedure testing utility in a few other tests... in place of checking for symptom Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/61ed0269 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/61ed0269 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/61ed0269 Branch: refs/heads/HBASE-14614 Commit: 61ed02691bf4dd66fb5ac4e5205a884a908eea00 Parents: 4ab52f2 Author: Michael Stack <st...@apache.org> Authored: Fri May 12 17:07:27 2017 -0700 Committer: Michael Stack <st...@apache.org> Committed: Fri May 12 17:07:27 2017 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/master/CatalogJanitor.java | 8 ++++-- .../hadoop/hbase/master/TestCatalogJanitor.java | 28 ++++++++------------ .../TestSplitTransactionOnCluster.java | 3 ++- 3 files changed, 19 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/61ed0269/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java index 2331d8f..7d43f2f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/CatalogJanitor.java @@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.master.assignment.AssignmentManager; import org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure; import org.apache.hadoop.hbase.master.assignment.GCRegionProcedure; import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; +import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.regionserver.HRegionFileSystem; import org.apache.hadoop.hbase.util.Bytes; @@ -54,6 +55,8 @@ import org.apache.hadoop.hbase.util.PairOfSameType; import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.hbase.util.Triple; +import com.google.common.annotations.VisibleForTesting; + /** * A janitor for the catalog tables. Scans the <code>hbase:meta</code> catalog * table on a period looking for unused regions to garbage collect. @@ -66,6 +69,7 @@ public class CatalogJanitor extends ScheduledChore { private final AtomicBoolean enabled = new AtomicBoolean(true); private final MasterServices services; private final Connection connection; + // PID of the last Procedure launched herein. Keep around for Tests. CatalogJanitor(final MasterServices services) { super("CatalogJanitor-" + services.getServerName().toShortString(), services, @@ -215,8 +219,8 @@ public class CatalogJanitor extends ScheduledChore { + regionB.getShortNameToLog() + " from fs because merged region no longer holds references"); ProcedureExecutor<MasterProcedureEnv> pe = this.services.getMasterProcedureExecutor(); - pe.submitProcedure(new GCMergedRegionsProcedure(pe.getEnvironment(),mergedRegion, - regionA, regionB)); + pe.submitProcedure(new GCMergedRegionsProcedure(pe.getEnvironment(), + mergedRegion, regionA, regionB)); return true; } return false; http://git-wip-us.apache.org/repos/asf/hbase/blob/61ed0269/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java index 5c082a4..59e8fb3 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java @@ -53,6 +53,7 @@ import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import org.apache.hadoop.hbase.io.Reference; import org.apache.hadoop.hbase.master.CatalogJanitor.SplitParentFirstComparator; import org.apache.hadoop.hbase.master.assignment.MockMasterServices; +import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; import org.apache.hadoop.hbase.regionserver.ChunkCreator; import org.apache.hadoop.hbase.regionserver.HStore; import org.apache.hadoop.hbase.regionserver.MemStoreLABImpl; @@ -135,14 +136,14 @@ public class TestCatalogJanitor { // Add a parentdir for kicks so can check it gets removed by the catalogjanitor. fs.mkdirs(parentdir); assertFalse(this.janitor.cleanParent(parent, r)); + ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); + assertTrue(fs.exists(parentdir)); // Remove the reference file and try again. assertTrue(fs.delete(p, true)); assertTrue(this.janitor.cleanParent(parent, r)); // Parent cleanup is run async as a procedure. Make sure parentdir is removed. - LOG.info("Waiting on " + parentdir); - while (fs.exists(parentdir)) { - Threads.sleep(10); - } + ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); + assertTrue(!fs.exists(parentdir)); } /** @@ -455,10 +456,8 @@ public class TestCatalogJanitor { assertTrue(janitor.cleanParent(parent, parentMetaRow)); Path parentDir = new Path(tabledir, parent.getEncodedName()); // Cleanup procedure runs async. Wait till it done. - LOG.info("Waiting on parent " + parentDir); - while (fs.exists(parentDir)) { - Threads.sleep(10); - } + ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); + assertTrue(!fs.exists(parentDir)); LOG.debug("Finished cleanup of parent region"); // and now check to make sure that the files have actually been archived @@ -525,11 +524,8 @@ public class TestCatalogJanitor { // Do the cleaning of the parent assertTrue(janitor.cleanParent(parent, r)); Path parentDir = new Path(tabledir, parent.getEncodedName()); - // Cleanup procedure runs async. Wait till it done. - LOG.info("Waiting on parent " + parentDir); - while (fs.exists(parentDir)) { - Threads.sleep(10); - } + ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); + assertTrue(!fs.exists(parentDir)); // And now check to make sure that the files have actually been archived FileStatus[] archivedStoreFiles = fs.listStatus(storeArchive); @@ -542,10 +538,8 @@ public class TestCatalogJanitor { // Do the cleaning of the parent assertTrue(janitor.cleanParent(parent, r)); // Cleanup procedure runs async. Wait till it done. - LOG.info("Waiting on parent " + parentDir); - while (fs.exists(parentDir)) { - Threads.sleep(10); - } + ProcedureTestingUtility.waitAllProcedures(masterServices.getMasterProcedureExecutor()); + assertTrue(!fs.exists(parentDir)); // and now check to make sure that the files have actually been archived archivedStoreFiles = fs.listStatus(storeArchive); http://git-wip-us.apache.org/repos/asf/hbase/blob/61ed0269/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java index a64d102..2630ce0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java @@ -77,6 +77,7 @@ import org.apache.hadoop.hbase.master.RegionState.State; import org.apache.hadoop.hbase.master.assignment.AssignmentManager; import org.apache.hadoop.hbase.master.assignment.RegionStates; import org.apache.hadoop.hbase.master.NoSuchProcedureException; +import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility; import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext; import org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController; @@ -534,7 +535,7 @@ public class TestSplitTransactionOnCluster { cluster.getMaster().setCatalogJanitorEnabled(true); LOG.info("Starting run of CatalogJanitor"); cluster.getMaster().getCatalogJanitor().run(); - LOG.info("Finished run of CatalogJanitor"); + ProcedureTestingUtility.waitAllProcedures(cluster.getMaster().getMasterProcedureExecutor()); RegionStates regionStates = master.getAssignmentManager().getRegionStates(); ServerName regionServerOfRegion = regionStates.getRegionServerOfRegion(hri); assertEquals(null, regionServerOfRegion);