You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/09/28 13:35:43 UTC

hbase git commit: HBASE-21249 Add jitter for ProcedureUtil.getBackoffTimeMs

Repository: hbase
Updated Branches:
  refs/heads/master d39ea25d4 -> 6bc7089f9


HBASE-21249 Add jitter for ProcedureUtil.getBackoffTimeMs

Signed-off-by: zhangduo <zh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/6bc7089f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/6bc7089f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/6bc7089f

Branch: refs/heads/master
Commit: 6bc7089f9e0793efc9bdd46a84f5ccd9bc4579ad
Parents: d39ea25
Author: meiyi <my...@gamil.com>
Authored: Fri Sep 28 16:04:37 2018 +0800
Committer: zhangduo <zh...@apache.org>
Committed: Fri Sep 28 21:27:45 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/6bc7089f/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/6bc7089f/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 {