Repository: hbase Updated Branches: refs/heads/branch-2.0 a482e1e69 -> cca7fd807
HBASE-21249 Add jitter for ProcedureUtil.getBackoffTimeMs Signed-off-by: zhangduo <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/cca7fd80 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/cca7fd80 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/cca7fd80 Branch: refs/heads/branch-2.0 Commit: cca7fd807d8e6f328713cb61f8db5091eb12a0b8 Parents: a482e1e Author: meiyi <[email protected]> Authored: Fri Sep 28 16:04:37 2018 +0800 Committer: zhangduo <[email protected]> Committed: Fri Sep 28 21:28:26 2018 +0800 ---------------------------------------------------------------------- .../hadoop/hbase/procedure2/ProcedureUtil.java | 6 +++++- .../hadoop/hbase/procedure2/TestProcedureUtil.java | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/cca7fd80/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java ---------------------------------------------------------------------- diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java index 8c8746e..27802ef 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureUtil.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; +import java.util.concurrent.ThreadLocalRandom; import org.apache.hadoop.hbase.HConstants; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hbase.thirdparty.com.google.common.base.Preconditions; @@ -343,6 +344,9 @@ public final class ProcedureUtil { if (attempts >= 30) { return maxBackoffTime; } - return Math.min((long) (1000 * Math.pow(2, attempts)), maxBackoffTime); + long backoffTimeMs = Math.min((long) (1000 * Math.pow(2, attempts)), maxBackoffTime); + // 1% possible jitter + long jitter = (long) (backoffTimeMs * ThreadLocalRandom.current().nextFloat() * 0.01f); + return backoffTimeMs + jitter; } } http://git-wip-us.apache.org/repos/asf/hbase/blob/cca7fd80/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.java ---------------------------------------------------------------------- diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.java index 6342bec..3629fb7 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hbase.procedure2; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.concurrent.TimeUnit; import org.apache.hadoop.hbase.HBaseClassTestRule; @@ -63,9 +64,17 @@ public class TestProcedureUtil { for (int i = 30; i < 1000; i++) { assertEquals(TimeUnit.MINUTES.toMillis(10), ProcedureUtil.getBackoffTimeMs(30)); } - assertEquals(1000, ProcedureUtil.getBackoffTimeMs(0)); - assertEquals(2000, ProcedureUtil.getBackoffTimeMs(1)); - assertEquals(32000, ProcedureUtil.getBackoffTimeMs(5)); + long backoffTimeMs = ProcedureUtil.getBackoffTimeMs(0); + assertTrue(backoffTimeMs >= 1000); + assertTrue(backoffTimeMs <= 1000 * 1.01f); + + backoffTimeMs = ProcedureUtil.getBackoffTimeMs(1); + assertTrue(backoffTimeMs >= 2000); + assertTrue(backoffTimeMs <= 2000 * 1.01f); + + backoffTimeMs = ProcedureUtil.getBackoffTimeMs(5); + assertTrue(backoffTimeMs >= 32000); + assertTrue(backoffTimeMs <= 32000 * 1.01f); } public static class TestProcedureNoDefaultConstructor extends TestProcedure {
