summaryrefslogtreecommitdiffstats
path: root/zookeeper-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2024-03-05 14:42:05 +0100
committerMartin Polden <mpolden@mpolden.no>2024-03-05 14:44:45 +0100
commite8e099766712a504bda2a96e664265cd77a3c223 (patch)
tree606664971d39599dfdcb3b24a379210bc151f245 /zookeeper-server
parent65c1240681f7e4d091776974a2f4348937d00d75 (diff)
Move ExponentialBackoff to vespajlib
Diffstat (limited to 'zookeeper-server')
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ExponentialBackoff.java47
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java1
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java1
-rw-r--r--zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ExponentialBackoffTest.java32
4 files changed, 2 insertions, 79 deletions
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ExponentialBackoff.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ExponentialBackoff.java
deleted file mode 100644
index 590504f74b9..00000000000
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ExponentialBackoff.java
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.zookeeper;
-
-import java.time.Duration;
-import java.util.Random;
-
-/**
- * Calculate a delay using an exponential backoff algorithm. Based on ExponentialBackOff in google-http-client.
- *
- * @author mpolden
- */
-public class ExponentialBackoff {
-
- private static final double RANDOMIZATION_FACTOR = 0.5;
-
- private final Duration initialDelay;
- private final Duration maxDelay;
- private final Random random;
-
- public ExponentialBackoff(Duration initialDelay, Duration maxDelay) {
- this(initialDelay, maxDelay, new Random());
- }
-
- ExponentialBackoff(Duration initialDelay, Duration maxDelay, Random random) {
- this.initialDelay = requireNonNegative(initialDelay);
- this.maxDelay = requireNonNegative(maxDelay);
- this.random = random;
- }
-
- /** Return the delay of given attempt */
- public Duration delay(int attempt) {
- if (attempt < 1) throw new IllegalArgumentException("Attempt must be positive");
- double currentDelay = attempt * initialDelay.toMillis();
- double delta = RANDOMIZATION_FACTOR * currentDelay;
- double lowerDelay = currentDelay - delta;
- double upperDelay = currentDelay + delta;
- long millis = (long) Math.min(lowerDelay + (random.nextDouble() * (upperDelay - lowerDelay + 1)),
- maxDelay.toMillis());
- return Duration.ofMillis(millis);
- }
-
- private static Duration requireNonNegative(Duration d) {
- if (d.isNegative()) throw new IllegalArgumentException("Invalid duration: " + d);
- return d;
- }
-
-}
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
index 201bb7af272..755dcd5c8e3 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
@@ -5,6 +5,7 @@ import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.AbstractComponent;
import com.yahoo.component.annotation.Inject;
import com.yahoo.protect.Process;
+import com.yahoo.time.ExponentialBackoff;
import com.yahoo.vespa.zookeeper.server.VespaZooKeeperServer;
import com.yahoo.yolean.Exceptions;
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
index 9c18dde3380..9234fa4cc36 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.zookeeper;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.protect.Process;
+import com.yahoo.time.ExponentialBackoff;
import com.yahoo.vespa.zookeeper.server.VespaZooKeeperServer;
import com.yahoo.yolean.Exceptions;
diff --git a/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ExponentialBackoffTest.java b/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ExponentialBackoffTest.java
deleted file mode 100644
index bc5c4531e51..00000000000
--- a/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ExponentialBackoffTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.zookeeper;
-
-import org.junit.Test;
-
-import java.time.Duration;
-import java.util.List;
-import java.util.Random;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * @author mpolden
- */
-public class ExponentialBackoffTest {
-
- @Test
- public void delay() {
- ExponentialBackoff b = new ExponentialBackoff(Duration.ofSeconds(1), Duration.ofSeconds(10), new Random(1000));
- assertEquals(List.of(Duration.ofMillis(1210),
- Duration.ofMillis(2150),
- Duration.ofMillis(4340),
- Duration.ofMillis(2157),
- Duration.ofMillis(4932)),
- IntStream.rangeClosed(1, 5)
- .mapToObj(b::delay)
- .toList());
- }
-
-}