File tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed
main/java/io/opentelemetry/opamp/client/internal/request/delay
test/java/io/opentelemetry/opamp/client/internal/request/delay Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ package io .opentelemetry .opamp .client .internal .request .delay ;
2+
3+ import java .time .Duration ;
4+ import java .util .Objects ;
5+ import java .util .concurrent .atomic .AtomicReference ;
6+
7+ /** Defaults to an exponential backoff strategy, unless a delay is suggested. */
8+ public final class RetryPeriodicDelay implements PeriodicDelay , AcceptsDelaySuggestion {
9+ private final ExponentialBackoffPeriodicDelay exponentialBackoff ;
10+ private final AtomicReference <PeriodicDelay > currentDelay ;
11+
12+ public static RetryPeriodicDelay create (Duration initialDelay ) {
13+ return new RetryPeriodicDelay (new ExponentialBackoffPeriodicDelay (initialDelay ));
14+ }
15+
16+ private RetryPeriodicDelay (ExponentialBackoffPeriodicDelay exponentialBackoff ) {
17+ this .exponentialBackoff = exponentialBackoff ;
18+ currentDelay = new AtomicReference <>(exponentialBackoff );
19+ }
20+
21+ @ Override
22+ public void suggestDelay (Duration delay ) {
23+ currentDelay .set (PeriodicDelay .ofFixedDuration (delay ));
24+ }
25+
26+ @ Override
27+ public Duration getNextDelay () {
28+ return Objects .requireNonNull (currentDelay .get ()).getNextDelay ();
29+ }
30+
31+ @ Override
32+ public void reset () {
33+ exponentialBackoff .reset ();
34+ currentDelay .set (exponentialBackoff );
35+ }
36+ }
Original file line number Diff line number Diff line change 1+ package io .opentelemetry .opamp .client .internal .request .delay ;
2+
3+ import static org .assertj .core .api .Assertions .assertThat ;
4+
5+ import java .time .Duration ;
6+ import org .junit .jupiter .api .Test ;
7+
8+ class RetryPeriodicDelayTest {
9+ @ Test
10+ public void verifyDelayBehavior () {
11+ RetryPeriodicDelay retryPeriodicDelay = RetryPeriodicDelay .create (Duration .ofSeconds (1 ));
12+
13+ // Without suggested delay
14+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (1 ));
15+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (2 ));
16+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (4 ));
17+ retryPeriodicDelay .reset ();
18+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (1 ));
19+
20+ // With suggested delay
21+ retryPeriodicDelay .suggestDelay (Duration .ofSeconds (5 ));
22+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (5 ));
23+ retryPeriodicDelay .reset ();
24+ assertThat (retryPeriodicDelay .getNextDelay ()).isEqualTo (Duration .ofSeconds (1 ));
25+ }
26+ }
You can’t perform that action at this time.
0 commit comments