From 974de4227483909c73d7d1c946dd184cfc2a145e Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Fri, 24 Aug 2018 16:42:34 +0800 Subject: [PATCH] HBASE-21097 Addendum calculate flush pressure when asserting as the memstore heap size is not zero and heap size can be different --- .../regionserver/RegionServerAccounting.java | 6 +++++- .../TestFlushWithThroughputController.java | 15 +++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java index baa9a6a0d2..e539ff9421 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java @@ -23,6 +23,9 @@ import java.util.concurrent.atomic.LongAdder; import org.apache.hadoop.conf.Configuration; import org.apache.yetus.audience.InterfaceAudience; + +import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting; + import org.apache.hadoop.hbase.io.util.MemorySizeUtil; import org.apache.hadoop.hbase.util.Pair; @@ -94,7 +97,8 @@ public class RegionServerAccounting { return this.memType == MemoryType.NON_HEAP; } - long getGlobalMemStoreLimitLowMark() { + @VisibleForTesting + public long getGlobalMemStoreLimitLowMark() { return this.globalMemStoreLimitLowMark; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestFlushWithThroughputController.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestFlushWithThroughputController.java index 61f9cd4969..6a3fe4bb2d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestFlushWithThroughputController.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestFlushWithThroughputController.java @@ -35,12 +35,14 @@ import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; +import org.apache.hadoop.hbase.io.util.MemorySizeUtil; import org.apache.hadoop.hbase.master.LoadBalancer; import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.regionserver.HStore; import org.apache.hadoop.hbase.regionserver.Region; +import org.apache.hadoop.hbase.regionserver.RegionServerAccounting; import org.apache.hadoop.hbase.regionserver.StoreEngine; import org.apache.hadoop.hbase.regionserver.StripeStoreEngine; import org.apache.hadoop.hbase.testclassification.MediumTests; @@ -66,7 +68,7 @@ public class TestFlushWithThroughputController { private static final Logger LOG = LoggerFactory.getLogger(TestFlushWithThroughputController.class); - private static final double EPSILON = 1.3E-6; + private static final double EPSILON = 1E-6; private HBaseTestingUtility hbtu; @Rule public TestName testName = new TestName(); @@ -78,9 +80,11 @@ public class TestFlushWithThroughputController { public void setUp() { hbtu = new HBaseTestingUtility(); tableName = TableName.valueOf("Table-" + testName.getMethodName()); + // Use on heap memstore here for better asserting the flush pressure + hbtu.getConfiguration().setLong(MemorySizeUtil.OFFHEAP_MEMSTORE_SIZE_KEY, 0); hbtu.getConfiguration().set( - FlushThroughputControllerFactory.HBASE_FLUSH_THROUGHPUT_CONTROLLER_KEY, - PressureAwareFlushThroughputController.class.getName()); + FlushThroughputControllerFactory.HBASE_FLUSH_THROUGHPUT_CONTROLLER_KEY, + PressureAwareFlushThroughputController.class.getName()); } @After @@ -182,7 +186,10 @@ public class TestFlushWithThroughputController { for (HRegion region : regionServer.getRegions()) { region.flush(true); } - assertEquals(0.0, regionServer.getFlushPressure(), EPSILON); + RegionServerAccounting accounting = regionServer.getRegionServerAccounting(); + assertEquals( + accounting.getGlobalMemStoreHeapSize() * 1.0 / accounting.getGlobalMemStoreLimitLowMark(), + regionServer.getFlushPressure(), EPSILON); Thread.sleep(5000); boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(hbtu.getConfiguration()); if (tablesOnMaster) { -- 2.17.1