HBASE-19418 configurable range of delay in PeriodicMemstoreFlusher Signed-off-by: Andrew Purtell <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f91a9124 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f91a9124 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f91a9124 Branch: refs/heads/branch-1.3 Commit: f91a912474551d136cfe8328b572a55b9fcdba3b Parents: 9321f7d Author: ramie-raufdeen <[email protected]> Authored: Mon Sep 10 18:39:53 2018 -0700 Committer: Andrew Purtell <[email protected]> Committed: Fri Sep 28 14:53:10 2018 -0700 ---------------------------------------------------------------------- .../apache/hadoop/hbase/regionserver/HRegionServer.java | 11 +++++++---- .../hbase/regionserver/TestRegionServerMetrics.java | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/f91a9124/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index d8176da..2099ad4 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1616,11 +1616,15 @@ public class HRegionServer extends HasThread implements static class PeriodicMemstoreFlusher extends ScheduledChore { final HRegionServer server; - final static int RANGE_OF_DELAY = 5 * 60 * 1000; // 5 min in milliseconds + final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds final static int MIN_DELAY_TIME = 0; // millisec + final int rangeOfDelay; public PeriodicMemstoreFlusher(int cacheFlushInterval, final HRegionServer server) { super(server.getServerName() + "-MemstoreFlusherChore", server, cacheFlushInterval); this.server = server; + + this.rangeOfDelay = this.server.conf.getInt("hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", + RANGE_OF_DELAY)*1000; } @Override @@ -1631,11 +1635,10 @@ public class HRegionServer extends HasThread implements if (((HRegion)r).shouldFlush(whyFlush)) { FlushRequester requester = server.getFlushRequester(); if (requester != null) { - long randomDelay = RandomUtils.nextInt(RANGE_OF_DELAY) + MIN_DELAY_TIME; + long randomDelay = (long) RandomUtils.nextInt(rangeOfDelay) + MIN_DELAY_TIME; LOG.info(getName() + " requesting flush of " + r.getRegionInfo().getRegionNameAsString() + " because " + - whyFlush.toString() + - " after random delay " + randomDelay + "ms"); + whyFlush.toString() + " after random delay " + randomDelay + "ms"); //Throttle the flushes by putting a delay. If we don't throttle, and there //is a balanced write-load on the regions in a table, we might end up //overwhelming the filesystem with too many flushes at once. http://git-wip-us.apache.org/repos/asf/hbase/blob/f91a9124/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java index e2ca677..a050b5e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java @@ -64,6 +64,7 @@ public class TestRegionServerMetrics { conf.getLong("hbase.splitlog.max.resubmit", 0); // Make the failure test faster conf.setInt("zookeeper.recovery.retry", 0); + conf.setInt("hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", 4*60); conf.setInt(HConstants.REGIONSERVER_INFO_PORT, -1); TEST_UTIL.startMiniCluster(1, 1);
