diff --git a/temporal-serviceclient/src/main/java/io/temporal/serviceclient/RpcRetryOptions.java b/temporal-serviceclient/src/main/java/io/temporal/serviceclient/RpcRetryOptions.java index a105098f4..bddcca5a1 100644 --- a/temporal-serviceclient/src/main/java/io/temporal/serviceclient/RpcRetryOptions.java +++ b/temporal-serviceclient/src/main/java/io/temporal/serviceclient/RpcRetryOptions.java @@ -272,7 +272,8 @@ public Builder setRetryOptions(RpcRetryOptions o) { setInitialInterval( OptionsUtils.merge(initialInterval, o.getInitialInterval(), Duration.class)); setCongestionInitialInterval( - OptionsUtils.merge(congestionInitialInterval, o.getInitialInterval(), Duration.class)); + OptionsUtils.merge( + congestionInitialInterval, o.getCongestionInitialInterval(), Duration.class)); setExpiration(OptionsUtils.merge(expiration, o.getExpiration(), Duration.class)); setMaximumInterval( OptionsUtils.merge(maximumInterval, o.getMaximumInterval(), Duration.class)); diff --git a/temporal-serviceclient/src/test/java/io/temporal/serviceclient/RpcRetryOptionsTest.java b/temporal-serviceclient/src/test/java/io/temporal/serviceclient/RpcRetryOptionsTest.java new file mode 100644 index 000000000..8b66a2ded --- /dev/null +++ b/temporal-serviceclient/src/test/java/io/temporal/serviceclient/RpcRetryOptionsTest.java @@ -0,0 +1,30 @@ +package io.temporal.serviceclient; + +import static org.junit.Assert.assertEquals; + +import java.time.Duration; +import org.junit.Test; + +public class RpcRetryOptionsTest { + + /** + * congestionInitialInterval is the backoff used for RESOURCE_EXHAUSTED and is deliberately set + * much higher than initialInterval. Builder.setRetryOptions must merge it from the source's + * congestionInitialInterval, not from its initialInterval, otherwise that margin is silently + * collapsed. + */ + @Test + public void setRetryOptionsMergesCongestionInitialInterval() { + RpcRetryOptions source = + RpcRetryOptions.newBuilder() + .setInitialInterval(Duration.ofMillis(200)) + .setCongestionInitialInterval(Duration.ofSeconds(7)) + .validateBuildWithDefaults(); + + RpcRetryOptions merged = + RpcRetryOptions.newBuilder().setRetryOptions(source).validateBuildWithDefaults(); + + assertEquals(Duration.ofMillis(200), merged.getInitialInterval()); + assertEquals(Duration.ofSeconds(7), merged.getCongestionInitialInterval()); + } +}