diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/conf/RatisClientConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/conf/RatisClientConfig.java index 680470187d55..8fef49429408 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/conf/RatisClientConfig.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/conf/RatisClientConfig.java @@ -203,6 +203,21 @@ public void setExponentialPolicyMaxSleep(Duration duration) { exponentialPolicyMaxSleep = duration; } + @Config(key = "client.exponential.backoff.max.retries", + defaultValue = "2147483647", + type = ConfigType.INT, + tags = { OZONE, CLIENT, PERFORMANCE }, + description = "Client's max retry value for the exponential backoff policy.") + private int exponentialPolicyMaxRetries = Integer.MAX_VALUE; + + public int getExponentialPolicyMaxRetries() { + return exponentialPolicyMaxRetries; + } + + public void setExponentialPolicyMaxRetries(int retry) { + exponentialPolicyMaxRetries = retry; + } + @Config(key = "client.retrylimited.retry.interval", defaultValue = "1s", type = ConfigType.TIME, diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/retrypolicy/RequestTypeDependentRetryPolicyCreator.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/retrypolicy/RequestTypeDependentRetryPolicyCreator.java index f8cda814f4a6..ff00743b25d1 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/retrypolicy/RequestTypeDependentRetryPolicyCreator.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/retrypolicy/RequestTypeDependentRetryPolicyCreator.java @@ -96,6 +96,8 @@ private static ExponentialBackoffRetry createExponentialBackoffPolicy( toTimeDuration(ratisClientConfig.getExponentialPolicyBaseSleep())) .setMaxSleepTime( toTimeDuration(ratisClientConfig.getExponentialPolicyMaxSleep())) + .setMaxAttempts( + ratisClientConfig.getExponentialPolicyMaxRetries()) .build(); } diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/conf/TestRatisClientConfig.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/conf/TestRatisClientConfig.java index 2d16af2a0cbd..d0e710cb81c2 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/conf/TestRatisClientConfig.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/conf/TestRatisClientConfig.java @@ -44,6 +44,8 @@ void defaults() { subject.getWatchRequestTimeout()); assertEquals(fromConfig.getWriteRequestTimeout(), subject.getWriteRequestTimeout()); + assertEquals(fromConfig.getExponentialPolicyMaxRetries(), + subject.getExponentialPolicyMaxRetries()); } @Test @@ -53,16 +55,19 @@ void setAndGet() { final Duration maxSleep = Duration.ofMinutes(2); final Duration watchRequestTimeout = Duration.ofMillis(555); final Duration writeRequestTimeout = Duration.ofMillis(444); + final int maxRetry = 10; subject.setExponentialPolicyBaseSleep(baseSleep); subject.setExponentialPolicyMaxSleep(maxSleep); subject.setWatchRequestTimeout(watchRequestTimeout); subject.setWriteRequestTimeout(writeRequestTimeout); + subject.setExponentialPolicyMaxRetries(maxRetry); assertEquals(baseSleep, subject.getExponentialPolicyBaseSleep()); assertEquals(maxSleep, subject.getExponentialPolicyMaxSleep()); assertEquals(watchRequestTimeout, subject.getWatchRequestTimeout()); assertEquals(writeRequestTimeout, subject.getWriteRequestTimeout()); + assertEquals(maxRetry, subject.getExponentialPolicyMaxRetries()); } }