From 01bbbc0c2539d1d662dff724249ba793f0e789b9 Mon Sep 17 00:00:00 2001 From: Wellington Chevreuil Date: Wed, 18 Aug 2021 11:05:10 +0100 Subject: [PATCH] Amend HBASE-26187 UTs, adding a check for Split procedure completion before proceeding with test logic. Change-Id: I9a8066aa5c0f646d6e147ded1f09588a97ebe1ec --- .../TestDirectStoreSplitsMerges.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDirectStoreSplitsMerges.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDirectStoreSplitsMerges.java index 16cdebb8069b..bd24f1b22293 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDirectStoreSplitsMerges.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDirectStoreSplitsMerges.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.regionserver; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.List; @@ -30,6 +31,8 @@ import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.RegionInfoBuilder; import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure; +import org.apache.hadoop.hbase.procedure2.Procedure; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.RegionServerTests; import org.apache.hadoop.hbase.util.Bytes; @@ -98,6 +101,7 @@ public void testMergeStoreFile() throws Exception { TEST_UTIL.createTable(table, FAMILY_NAME); //splitting the table first TEST_UTIL.getAdmin().split(table, Bytes.toBytes("002")); + waitForSplitProcComplete(1000, 10); //Add data and flush to create files in the two different regions putThreeRowsAndFlush(table); List regions = TEST_UTIL.getHBaseCluster().getRegions(table); @@ -176,6 +180,7 @@ public void testCommitMergedRegion() throws Exception { TEST_UTIL.createTable(table, FAMILY_NAME); //splitting the table first TEST_UTIL.getAdmin().split(table, Bytes.toBytes("002")); + waitForSplitProcComplete(1000, 10); //Add data and flush to create files in the two different regions putThreeRowsAndFlush(table); List regions = TEST_UTIL.getHBaseCluster().getRegions(table); @@ -202,6 +207,22 @@ public void testCommitMergedRegion() throws Exception { mergeRegionFs.commitMergedRegion(); } + private void waitForSplitProcComplete(int attempts, int waitTime) throws Exception { + List> procedures = TEST_UTIL.getHBaseCluster().getMaster().getProcedures(); + if(procedures.size()>0) { + Procedure splitProc = procedures.stream(). + filter(p -> p instanceof SplitTableRegionProcedure).findFirst().get(); + int count = 0; + while ((splitProc.isWaiting() || splitProc.isRunnable()) && count < attempts) { + synchronized (splitProc) { + splitProc.wait(waitTime); + } + count++; + } + assertTrue(splitProc.isSuccess()); + } + } + private void mergeFileFromRegion(HRegionFileSystem regionFS, HRegion regionToMerge, HStoreFile file) throws IOException { Path mergedFile = regionFS.mergeStoreFile(regionToMerge.getRegionInfo(),