Skip to content

Commit 6c5f788

Browse files
authored
ZOOKEEPER-4943: Use Duration for session timeout in ZooKeeperBuilder
ZOOKEEPER-4943: Use Duration for session timeout in ZooKeeperBuilder `ZooKeeperBuilder` is introduced in ZOOKEEPER-4697 which targets 3.10.0, so this api change breaks nothing. Refs: ZOOKEEPER-4697, ZOOKEEPER-4943 Author: kezhuw Closes #2274 from kezhuw/ZOOKEEPER-4943-ZooKeeperBuilder-Duration-timeout
1 parent 02e93c2 commit 6c5f788

File tree

4 files changed

+27
-22
lines changed

4 files changed

+27
-22
lines changed

zookeeper-server/src/main/java/org/apache/zookeeper/ZooKeeper.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.lang.reflect.Constructor;
2323
import java.net.InetSocketAddress;
2424
import java.net.SocketAddress;
25+
import java.time.Duration;
2526
import java.util.ArrayList;
2627
import java.util.Collection;
2728
import java.util.Collections;
@@ -462,7 +463,7 @@ public boolean isConnected() {
462463
* if an invalid chroot path is specified
463464
*/
464465
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException {
465-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
466+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
466467
.withDefaultWatcher(watcher)
467468
.toOptions());
468469
}
@@ -517,7 +518,7 @@ public ZooKeeper(
517518
int sessionTimeout,
518519
Watcher watcher,
519520
ZKClientConfig conf) throws IOException {
520-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
521+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
521522
.withDefaultWatcher(watcher)
522523
.withClientConfig(conf)
523524
.toOptions());
@@ -586,7 +587,7 @@ public ZooKeeper(
586587
Watcher watcher,
587588
boolean canBeReadOnly,
588589
HostProvider aHostProvider) throws IOException {
589-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
590+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
590591
.withDefaultWatcher(watcher)
591592
.withCanBeReadOnly(canBeReadOnly)
592593
.withHostProvider(ignored -> aHostProvider)
@@ -660,7 +661,7 @@ public ZooKeeper(
660661
HostProvider hostProvider,
661662
ZKClientConfig clientConfig
662663
) throws IOException {
663-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
664+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
664665
.withDefaultWatcher(watcher)
665666
.withCanBeReadOnly(canBeReadOnly)
666667
.withHostProvider(ignored -> hostProvider)
@@ -746,7 +747,7 @@ public ZooKeeper(
746747
int sessionTimeout,
747748
Watcher watcher,
748749
boolean canBeReadOnly) throws IOException {
749-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
750+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
750751
.withDefaultWatcher(watcher)
751752
.withCanBeReadOnly(canBeReadOnly)
752753
.toOptions());
@@ -812,7 +813,7 @@ public ZooKeeper(
812813
Watcher watcher,
813814
boolean canBeReadOnly,
814815
ZKClientConfig conf) throws IOException {
815-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
816+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
816817
.withDefaultWatcher(watcher)
817818
.withCanBeReadOnly(canBeReadOnly)
818819
.withClientConfig(conf)
@@ -877,7 +878,7 @@ public ZooKeeper(
877878
Watcher watcher,
878879
long sessionId,
879880
byte[] sessionPasswd) throws IOException {
880-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
881+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
881882
.withDefaultWatcher(watcher)
882883
.withSession(sessionId, sessionPasswd)
883884
.toOptions());
@@ -955,7 +956,7 @@ public ZooKeeper(
955956
byte[] sessionPasswd,
956957
boolean canBeReadOnly,
957958
HostProvider aHostProvider) throws IOException {
958-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
959+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
959960
.withDefaultWatcher(watcher)
960961
.withSession(sessionId, sessionPasswd)
961962
.withCanBeReadOnly(canBeReadOnly)
@@ -1041,7 +1042,7 @@ public ZooKeeper(
10411042
boolean canBeReadOnly,
10421043
HostProvider hostProvider,
10431044
ZKClientConfig clientConfig) throws IOException {
1044-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
1045+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
10451046
.withSession(sessionId, sessionPasswd)
10461047
.withDefaultWatcher(watcher)
10471048
.withCanBeReadOnly(canBeReadOnly)
@@ -1072,7 +1073,7 @@ public ZooKeeper(
10721073
@InterfaceAudience.Private
10731074
public ZooKeeper(ZooKeeperOptions options) throws IOException {
10741075
String connectString = options.getConnectString();
1075-
int sessionTimeout = options.getSessionTimeout();
1076+
int sessionTimeout = options.getSessionTimeoutMs();
10761077
long sessionId = options.getSessionId();
10771078
byte[] sessionPasswd = sessionId == 0 ? new byte[16] : options.getSessionPasswd();
10781079
Watcher watcher = options.getDefaultWatcher();
@@ -1188,7 +1189,7 @@ public ZooKeeper(
11881189
long sessionId,
11891190
byte[] sessionPasswd,
11901191
boolean canBeReadOnly) throws IOException {
1191-
this(new ZooKeeperBuilder(connectString, sessionTimeout)
1192+
this(new ZooKeeperBuilder(connectString, Duration.ofMillis(sessionTimeout))
11921193
.withDefaultWatcher(watcher)
11931194
.withSession(sessionId, sessionPasswd)
11941195
.withCanBeReadOnly(canBeReadOnly)

zookeeper-server/src/main/java/org/apache/zookeeper/client/ZooKeeperBuilder.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2222
import java.io.IOException;
2323
import java.net.InetSocketAddress;
24+
import java.time.Duration;
2425
import java.util.Collection;
26+
import java.util.Objects;
2527
import java.util.function.Function;
2628
import org.apache.yetus.audience.InterfaceAudience;
2729
import org.apache.yetus.audience.InterfaceStability;
@@ -36,7 +38,7 @@
3638
@InterfaceStability.Evolving
3739
public class ZooKeeperBuilder {
3840
private final String connectString;
39-
private final int sessionTimeout;
41+
private final Duration sessionTimeout;
4042
private Function<Collection<InetSocketAddress>, HostProvider> hostProvider;
4143
private Watcher defaultWatcher;
4244
private boolean canBeReadOnly = false;
@@ -56,12 +58,12 @@ public class ZooKeeperBuilder {
5658
* would be relative to this root - ie getting/setting/etc...
5759
* "/foo/bar" would result in operations being run on
5860
* "/app/a/foo/bar" (from the server perspective).
59-
* @param sessionTimeoutMs
60-
* session timeout in milliseconds
61+
* @param sessionTimeout
62+
* session timeout
6163
*/
62-
public ZooKeeperBuilder(String connectString, int sessionTimeoutMs) {
64+
public ZooKeeperBuilder(String connectString, Duration sessionTimeout) {
6365
this.connectString = connectString;
64-
this.sessionTimeout = sessionTimeoutMs;
66+
this.sessionTimeout = Objects.requireNonNull(sessionTimeout, "session timeout must not be null");
6567
}
6668

6769
/**

zookeeper-server/src/main/java/org/apache/zookeeper/client/ZooKeeperOptions.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2222
import java.net.InetSocketAddress;
23+
import java.time.Duration;
2324
import java.util.Collection;
2425
import java.util.function.Function;
2526
import org.apache.yetus.audience.InterfaceAudience;
@@ -31,7 +32,7 @@
3132
@InterfaceAudience.Private
3233
public class ZooKeeperOptions {
3334
private final String connectString;
34-
private final int sessionTimeout;
35+
private final Duration sessionTimeout;
3536
private final Watcher defaultWatcher;
3637
private final Function<Collection<InetSocketAddress>, HostProvider> hostProvider;
3738
private final boolean canBeReadOnly;
@@ -40,7 +41,7 @@ public class ZooKeeperOptions {
4041
private final ZKClientConfig clientConfig;
4142

4243
ZooKeeperOptions(String connectString,
43-
int sessionTimeout,
44+
Duration sessionTimeout,
4445
Watcher defaultWatcher,
4546
Function<Collection<InetSocketAddress>, HostProvider> hostProvider,
4647
boolean canBeReadOnly,
@@ -61,8 +62,8 @@ public String getConnectString() {
6162
return connectString;
6263
}
6364

64-
public int getSessionTimeout() {
65-
return sessionTimeout;
65+
public int getSessionTimeoutMs() {
66+
return (int) Long.min(Integer.MAX_VALUE, sessionTimeout.toMillis());
6667
}
6768

6869
public Watcher getDefaultWatcher() {

zookeeper-server/src/test/java/org/apache/zookeeper/client/ZooKeeperBuilderTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import static org.junit.jupiter.api.Assertions.assertEquals;
2222
import static org.junit.jupiter.api.Assertions.assertNotNull;
23+
import java.time.Duration;
2324
import java.util.concurrent.BlockingQueue;
2425
import java.util.concurrent.LinkedBlockingQueue;
2526
import java.util.concurrent.TimeUnit;
@@ -69,7 +70,7 @@ private void testClient(BlockingQueue<WatchedEvent> events, ZooKeeper zk) throws
6970
@Test
7071
public void testBuildClient() throws Exception {
7172
BlockingQueue<WatchedEvent> events = new LinkedBlockingQueue<>();
72-
ZooKeeper zk = new ZooKeeperBuilder(hostPort, 1000)
73+
ZooKeeper zk = new ZooKeeperBuilder(hostPort, Duration.ofMillis(1000))
7374
.withDefaultWatcher(events::offer)
7475
.build();
7576
testClient(events, zk);
@@ -78,7 +79,7 @@ public void testBuildClient() throws Exception {
7879
@Test
7980
public void testBuildAdminClient() throws Exception {
8081
BlockingQueue<WatchedEvent> events = new LinkedBlockingQueue<>();
81-
ZooKeeper zk = new ZooKeeperBuilder(hostPort, 1000)
82+
ZooKeeper zk = new ZooKeeperBuilder(hostPort, Duration.ofMillis(1000))
8283
.withDefaultWatcher(events::offer)
8384
.buildAdmin();
8485
testClient(events, zk);

0 commit comments

Comments
 (0)