From d137991ccc876988ae8832c316457e525f6bf387 Mon Sep 17 00:00:00 2001 From: tedyu Date: Thu, 18 May 2017 15:50:59 -0700 Subject: [PATCH] HBASE-18058 Zookeeper retry sleep time should have an upper limit (Allan Yang) --- .../hadoop/hbase/zookeeper/RecoverableZooKeeper.java | 8 ++++---- .../java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java | 3 ++- hbase-common/src/main/resources/hbase-default.xml | 7 +++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java index e0a950d6f5d..6968ad95acb 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.java @@ -100,20 +100,20 @@ public class RecoverableZooKeeper { private static final int ID_LENGTH_SIZE = Bytes.SIZEOF_INT; public RecoverableZooKeeper(String quorumServers, int sessionTimeout, - Watcher watcher, int maxRetries, int retryIntervalMillis) + Watcher watcher, int maxRetries, int retryIntervalMillis, int maxSleepTime) throws IOException { - this(quorumServers, sessionTimeout, watcher, maxRetries, retryIntervalMillis, + this(quorumServers, sessionTimeout, watcher, maxRetries, retryIntervalMillis, maxSleepTime, null); } @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DE_MIGHT_IGNORE", justification="None. Its always been this way.") public RecoverableZooKeeper(String quorumServers, int sessionTimeout, - Watcher watcher, int maxRetries, int retryIntervalMillis, String identifier) + Watcher watcher, int maxRetries, int retryIntervalMillis, int maxSleepTime, String identifier) throws IOException { // TODO: Add support for zk 'chroot'; we don't add it to the quorumServers String as we should. this.retryCounterFactory = - new RetryCounterFactory(maxRetries+1, retryIntervalMillis); + new RetryCounterFactory(maxRetries+1, retryIntervalMillis, maxSleepTime); if (identifier == null || identifier.length() == 0) { // the identifier = processID@hostName diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java index c678a7cf7a0..08b059e8fb0 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java @@ -131,10 +131,11 @@ public class ZKUtil { int retry = conf.getInt("zookeeper.recovery.retry", 3); int retryIntervalMillis = conf.getInt("zookeeper.recovery.retry.intervalmill", 1000); + int maxSleepTime = conf.getInt("zookeeper.recovery.retry.maxsleeptime", 60000); zkDumpConnectionTimeOut = conf.getInt("zookeeper.dump.connection.timeout", 1000); return new RecoverableZooKeeper(ensemble, timeout, watcher, - retry, retryIntervalMillis, identifier); + retry, retryIntervalMillis, maxSleepTime, identifier); } /** diff --git a/hbase-common/src/main/resources/hbase-default.xml b/hbase-common/src/main/resources/hbase-default.xml index a6e37ef61ea..70c638b9134 100644 --- a/hbase-common/src/main/resources/hbase-default.xml +++ b/hbase-common/src/main/resources/hbase-default.xml @@ -95,6 +95,13 @@ possible configurations would overwhelm and obscure the important. + + zookeeper.recovery.retry.maxsleeptime + 60000 + Max sleep time before retry zookeeper operations in milliseconds, + a max time is needed here so that sleep time won't grow unboundedly + + hbase.local.dir ${hbase.tmp.dir}/local/