Skip to content

Commit 3e93881

Browse files
authored
5409 duration timeout (helidon-io#5709)
add methods that use Duration
1 parent 4f357a9 commit 3e93881

11 files changed

Lines changed: 150 additions & 16 deletions

File tree

common/reactive/src/main/java/io/helidon/common/reactive/Awaitable.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021 Oracle and/or its affiliates.
2+
* Copyright (c) 2020, 2022 Oracle and/or its affiliates.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -63,7 +63,9 @@ default T await() {
6363
* @throws java.util.concurrent.CancellationException if this future was cancelled
6464
* @throws java.util.concurrent.CompletionException if this future completed exceptionally,
6565
* was interrupted while waiting or the wait timed out
66+
* @deprecated use {@link #await(Duration)} instead
6667
*/
68+
@Deprecated(since = "4.0.0")
6769
default T await(long timeout, TimeUnit unit) {
6870
try {
6971
return this.toCompletableFuture().get(timeout, unit);

common/reactive/src/main/java/io/helidon/common/reactive/IoMulti.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2021 Oracle and/or its affiliates.
2+
* Copyright (c) 2020, 2022 Oracle and/or its affiliates.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -446,12 +446,26 @@ private OutputStreamMultiBuilder() {
446446
* @param timeout the maximum time to block
447447
* @param unit the time unit of the timeout argument
448448
* @return this builder
449+
* @deprecated use {@link #timeout(Duration)} instead
449450
*/
451+
@Deprecated(since = "4.0.0")
450452
public OutputStreamMultiBuilder timeout(long timeout, TimeUnit unit) {
451453
this.timeout = Duration.of(timeout, unit.toChronoUnit());
452454
return this;
453455
}
454456

457+
/**
458+
* Set max timeout for which is allowed to block write methods,
459+
* in case there is no demand from downstream.
460+
*
461+
* @param timeout the maximum time to block
462+
* @return this builder
463+
*/
464+
public OutputStreamMultiBuilder timeout(Duration timeout) {
465+
this.timeout = timeout;
466+
return this;
467+
}
468+
455469
/**
456470
* Callback executed when request signal from downstream arrive.
457471
* <ul>

config/config/src/main/java/io/helidon/config/FileSystemWatcher.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.nio.file.WatchEvent;
2525
import java.nio.file.WatchKey;
2626
import java.nio.file.WatchService;
27+
import java.time.Duration;
2728
import java.util.Arrays;
2829
import java.util.Collections;
2930
import java.util.LinkedList;
@@ -413,15 +414,41 @@ public Builder executor(ScheduledExecutorService executor) {
413414
* @param initialDelay initial delay before regular scheduling starts
414415
* @param delay delay between schedules
415416
* @param timeUnit time unit of the delays
416-
* @return updated builer instance
417+
* @return updated builder instance
418+
* @deprecated use {@link #initialDelay(Duration)} and {@link #delay(Duration)} instead
417419
*/
420+
@Deprecated(since = "4.0.0")
418421
public Builder schedule(long initialDelay, long delay, TimeUnit timeUnit) {
419422
this.initialDelay = initialDelay;
420423
this.delay = delay;
421424
this.timeUnit = timeUnit;
422425
return this;
423426
}
424427

428+
/**
429+
* Configure an initial delay before regular scheduling starts.
430+
*
431+
* @param initialDelay initial delay
432+
* @return updated builder instance
433+
*/
434+
public Builder initialDelay(Duration initialDelay) {
435+
this.initialDelay = initialDelay.toMillis();
436+
this.timeUnit = TimeUnit.MILLISECONDS;
437+
return this;
438+
}
439+
440+
/**
441+
* Configure a delay between schedules.
442+
*
443+
* @param delay delay between schedules
444+
* @return updated builder instance
445+
*/
446+
public Builder delay(Duration delay) {
447+
this.delay = delay.toMillis();
448+
this.timeUnit = TimeUnit.MILLISECONDS;
449+
return this;
450+
}
451+
425452
/**
426453
* Add a modifier of the watch service.
427454
* Currently only implementation specific modifier are available, such as

integrations/microstream/health/src/main/java/io/helidon/integrations/microstream/health/MicrostreamHealthCheck.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021 Oracle and/or its affiliates.
2+
* Copyright (c) 2021, 2022 Oracle and/or its affiliates.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
package io.helidon.integrations.microstream.health;
1818

19+
import java.time.Duration;
1920
import java.util.concurrent.CompletableFuture;
2021
import java.util.concurrent.TimeUnit;
2122

@@ -129,11 +130,26 @@ public Builder name(String name) {
129130
* @param duration the maximum time to wait for statement execution response
130131
* @param timeUnit the time unit of the timeout argument
131132
* @return updated builder instance
133+
* @deprecated use {@link #timeout(Duration)} instead
132134
*/
135+
@Deprecated(since = "4.0.0")
133136
public Builder timeout(long duration, TimeUnit timeUnit) {
134137
this.timeoutDuration = duration;
135138
this.timeoutUnit = timeUnit;
136139
return this;
137140
}
141+
142+
/**
143+
* Set custom timeout to wait for statement execution response. Default value is
144+
* 10 seconds.
145+
*
146+
* @param duration the maximum time to wait for statement execution response
147+
* @return updated builder instance
148+
*/
149+
public Builder timeout(Duration duration) {
150+
this.timeoutDuration = duration.toNanos();
151+
this.timeoutUnit = TimeUnit.NANOSECONDS;
152+
return this;
153+
}
138154
}
139155
}

lra/coordinator/client/narayana-client/src/main/java/io/helidon/lra/coordinator/client/narayana/NarayanaClient.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import java.util.Optional;
23-
import java.util.concurrent.TimeUnit;
2423
import java.util.function.Function;
2524
import java.util.function.Supplier;
2625
import java.util.logging.Level;
@@ -61,17 +60,15 @@ public class NarayanaClient implements CoordinatorClient {
6160
private static final Pattern LRA_ID_PATTERN = Pattern.compile("(.*)/([^/?]+).*");
6261

6362
private Supplier<URI> coordinatorUriSupplier;
64-
private Long coordinatorTimeout;
65-
private TimeUnit coordinatorTimeoutUnit;
63+
private Duration coordinatorTimeout;
6664
private Retry retry;
6765

6866
@Override
69-
public void init(Supplier<URI> coordinatorUriSupplier, long timeout, TimeUnit timeoutUnit) {
67+
public void init(Supplier<URI> coordinatorUriSupplier, Duration timeout) {
7068
this.coordinatorUriSupplier = coordinatorUriSupplier;
7169
this.coordinatorTimeout = timeout;
72-
this.coordinatorTimeoutUnit = timeoutUnit;
7370
this.retry = Retry.builder()
74-
.overallTimeout(Duration.ofMillis(timeoutUnit.toMillis(timeout)))
71+
.overallTimeout(timeout)
7572
.retryPolicy(Retry.JitterRetryPolicy.builder()
7673
.calls(RETRY_ATTEMPTS)
7774
.build())
@@ -289,8 +286,8 @@ private WebClient prepareWebClient(URI uri) {
289286
.baseUri(uri)
290287
// Workaround for #3242
291288
.keepAlive(false)
292-
.connectTimeout(coordinatorTimeout, coordinatorTimeoutUnit)
293-
.readTimeout(coordinatorTimeout, coordinatorTimeoutUnit)
289+
.connectTimeout(coordinatorTimeout)
290+
.readTimeout(coordinatorTimeout)
294291
.addReader(new LraStatusReader())
295292
.build();
296293
}

lra/coordinator/client/spi/src/main/java/io/helidon/lra/coordinator/client/CoordinatorClient.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.helidon.lra.coordinator.client;
1818

1919
import java.net.URI;
20+
import java.time.Duration;
2021
import java.util.Optional;
2122
import java.util.concurrent.TimeUnit;
2223
import java.util.function.Supplier;
@@ -59,8 +60,20 @@ public interface CoordinatorClient {
5960
* @param coordinatorUriSupplier url of the coordinator
6061
* @param timeout general timeout for coordinator calls
6162
* @param timeoutUnit timeout unit for coordinator calls
63+
* @deprecated use {@link #init(Supplier, Duration)} instead
6264
*/
63-
void init(Supplier<URI> coordinatorUriSupplier, long timeout, TimeUnit timeoutUnit);
65+
@Deprecated(forRemoval = true, since = "4.0.0")
66+
default void init(Supplier<URI> coordinatorUriSupplier, long timeout, TimeUnit timeoutUnit){
67+
init(coordinatorUriSupplier, Duration.ofMillis(timeoutUnit.toMillis(timeout)));
68+
}
69+
70+
/**
71+
* Initialization of the properties provided by LRA client.
72+
*
73+
* @param coordinatorUriSupplier url of the coordinator
74+
* @param timeout general timeout for coordinator calls
75+
*/
76+
void init(Supplier<URI> coordinatorUriSupplier, Duration timeout);
6477

6578
/**
6679
* Ask coordinator to start new LRA and return its id.

reactive/dbclient/health/src/main/java/io/helidon/reactive/dbclient/health/DbClientHealthCheck.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,13 +483,28 @@ public Builder statement(final String statement) {
483483
* @param duration the maximum time to wait for statement execution response
484484
* @param timeUnit the time unit of the timeout argument
485485
* @return updated builder instance
486+
* @deprecated use {@link #timeout(Duration)} instead
486487
*/
488+
@Deprecated(since = "4.0.0")
487489
public Builder timeout(final long duration, final TimeUnit timeUnit) {
488490
this.timeoutDuration = duration;
489491
this.timeoutUnit = timeUnit;
490492
return this;
491493
}
492494

495+
/**
496+
* Set custom timeout to wait for statement execution response.
497+
* Default value is {@code 10} seconds.
498+
*
499+
* @param timeout the maximum time to wait for statement execution response
500+
* @return updated builder instance
501+
*/
502+
public Builder timeout(final Duration timeout) {
503+
this.timeoutDuration = timeout.toNanos();
504+
this.timeoutUnit = TimeUnit.NANOSECONDS;
505+
return this;
506+
}
507+
493508
// Getters for local usage and jUnit tests
494509

495510
String name() {

reactive/health/src/main/java/io/helidon/reactive/health/HealthSupport.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ private HealthSupport(Builder builder) {
113113
}
114114

115115
// Lazy values to prevent early init of maybe-not-yet-configured FT thread pools
116-
this.timeout = LazyValue.create(() -> Timeout.create(Duration.ofMillis(builder.timeoutMillis)));
116+
this.timeout = LazyValue.create(() -> Timeout.create(builder.timeout));
117117
this.async = LazyValue.create(Async::create);
118118
}
119119

@@ -369,7 +369,7 @@ public static final class Builder extends HelidonRestServiceSupport.Builder<Buil
369369
private final Set<String> excludedHealthChecks = new HashSet<>();
370370
private boolean details = true;
371371
private boolean enabled = true;
372-
private long timeoutMillis = DEFAULT_TIMEOUT_MILLIS;
372+
private Duration timeout = Duration.ofMillis(DEFAULT_TIMEOUT_MILLIS);
373373

374374
private Builder() {
375375
super(DEFAULT_WEB_CONTEXT);
@@ -454,7 +454,7 @@ public Builder config(Config config) {
454454
}
455455

456456
private void timeoutMillis(long aLong) {
457-
this.timeoutMillis = aLong;
457+
this.timeout = Duration.ofMillis(aLong);
458458
}
459459

460460
/**
@@ -463,16 +463,29 @@ private void timeoutMillis(long aLong) {
463463
* @param timeout timeout value
464464
* @param unit timeout time unit
465465
* @return updated builder instance
466+
* @deprecated use {@link #timeout(Duration)} instead
466467
*/
467468
@ConfiguredOption(key = TIMEOUT_CONFIG_KEY,
468469
description = "health endpoint timeout (ms)",
469470
type = Long.class,
470471
value = "10000")
472+
@Deprecated(since = "4.0.0")
471473
public Builder timeout(long timeout, TimeUnit unit) {
472474
timeoutMillis(unit.toMillis(timeout));
473475
return this;
474476
}
475477

478+
/**
479+
* Configure overall timeout of health check call.
480+
*
481+
* @param timeout timeout value
482+
* @return updated builder instance
483+
*/
484+
public Builder timeout(Duration timeout) {
485+
this.timeout = timeout;
486+
return this;
487+
}
488+
476489
/**
477490
* A class may be excluded from invoking health checks on it.
478491
* This allows configurable approach to disabling broken health-checks.

reactive/webclient/webclient/src/main/java/io/helidon/reactive/webclient/WebClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,9 @@ public Builder config(Config config) {
269269
* @param amount amount of time
270270
* @param unit time unit
271271
* @return updated builder instance
272+
* @deprecated use {@link #connectTimeout(Duration)} instead
272273
*/
274+
@Deprecated(since = "4.0.0")
273275
public Builder connectTimeout(long amount, TimeUnit unit) {
274276
return connectTimeout(Duration.of(amount, unit.toChronoUnit()));
275277
}
@@ -291,7 +293,9 @@ public Builder connectTimeout(Duration timeout) {
291293
* @param amount amount of time
292294
* @param unit time unit
293295
* @return updated builder instance
296+
* @deprecated use {@link #readTimeout(Duration)} instead
294297
*/
298+
@Deprecated(since = "4.0.0")
295299
public Builder readTimeout(long amount, TimeUnit unit) {
296300
return readTimeout(Duration.of(amount, unit.toChronoUnit()));
297301
}

reactive/webclient/webclient/src/main/java/io/helidon/reactive/webclient/WebClientRequestBuilder.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.net.URI;
1919
import java.net.URL;
20+
import java.time.Duration;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.concurrent.CompletionStage;
@@ -270,18 +271,38 @@ default WebClientRequestBuilder addHeaders(Headers parameters){
270271
* @param amount amount of time
271272
* @param unit time unit
272273
* @return updated builder instance
274+
* @deprecated use {@link #connectTimeout(Duration)} instead
273275
*/
276+
@Deprecated(since = "4.0.0")
274277
WebClientRequestBuilder connectTimeout(long amount, TimeUnit unit);
275278

279+
/**
280+
* Sets new connection timeout for this request.
281+
*
282+
* @param connectionTimeout amount of time
283+
* @return updated builder instance
284+
*/
285+
WebClientRequestBuilder connectTimeout(Duration connectionTimeout);
286+
276287
/**
277288
* Sets new read timeout for this request.
278289
*
279290
* @param amount amount of time
280291
* @param unit time unit
281292
* @return updated builder instance
293+
* @deprecated use {@link #readTimeout(Duration)} instead
282294
*/
295+
@Deprecated(since = "4.0.0")
283296
WebClientRequestBuilder readTimeout(long amount, TimeUnit unit);
284297

298+
/**
299+
* Sets new read timeout for this request.
300+
*
301+
* @param readTimeout amount of time
302+
* @return updated builder instance
303+
*/
304+
WebClientRequestBuilder readTimeout(Duration readTimeout);
305+
285306
/**
286307
* Fragment of the request.
287308
*

0 commit comments

Comments
 (0)