diff --git a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java index 164fd3b41..507fadc93 100644 --- a/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java +++ b/sdk-workflows/src/main/java/io/dapr/workflows/runtime/DefaultWorkflowContext.java @@ -281,6 +281,9 @@ private RetryPolicy toRetryPolicy(WorkflowTaskRetryPolicy workflowTaskRetryPolic ); retryPolicy.setBackoffCoefficient(workflowTaskRetryPolicy.getBackoffCoefficient()); + if (workflowTaskRetryPolicy.getMaxRetryInterval() != null) { + retryPolicy.setMaxRetryInterval(workflowTaskRetryPolicy.getMaxRetryInterval()); + } if (workflowTaskRetryPolicy.getRetryTimeout() != null) { retryPolicy.setRetryTimeout(workflowTaskRetryPolicy.getRetryTimeout()); } diff --git a/sdk-workflows/src/test/java/io/dapr/workflows/DefaultWorkflowContextTest.java b/sdk-workflows/src/test/java/io/dapr/workflows/DefaultWorkflowContextTest.java index 18f31e507..f1a54690b 100644 --- a/sdk-workflows/src/test/java/io/dapr/workflows/DefaultWorkflowContextTest.java +++ b/sdk-workflows/src/test/java/io/dapr/workflows/DefaultWorkflowContextTest.java @@ -523,4 +523,44 @@ public void workflowRetryPolicyRetryThrowIllegalArgumentWhenRetryTimeoutIsLessTh .setRetryTimeout(Duration.ofSeconds(9)) .build()); } + + @Test + public void callActivityRetryPolicyMaxRetryIntervalShouldBePropagated() { + String expectedName = "TestActivity"; + String expectedInput = "TestInput"; + Duration expectedMaxRetryInterval = Duration.ofSeconds(60); + WorkflowTaskRetryPolicy retryPolicy = WorkflowTaskRetryPolicy.newBuilder() + .setMaxNumberOfAttempts(5) + .setFirstRetryInterval(Duration.ofSeconds(1)) + .setMaxRetryInterval(expectedMaxRetryInterval) + .build(); + WorkflowTaskOptions options = new WorkflowTaskOptions(retryPolicy); + ArgumentCaptor captor = ArgumentCaptor.forClass(TaskOptions.class); + + context.callActivity(expectedName, expectedInput, options, String.class); + + verify(mockInnerContext, times(1)) + .callActivity(eq(expectedName), eq(expectedInput), captor.capture(), eq(String.class)); + + assertEquals(expectedMaxRetryInterval, captor.getValue().getRetryPolicy().getMaxRetryInterval()); + } + + @Test + public void callActivityRetryPolicyDefaultMaxRetryIntervalShouldBeZeroWhenNotSet() { + String expectedName = "TestActivity"; + String expectedInput = "TestInput"; + WorkflowTaskRetryPolicy retryPolicy = WorkflowTaskRetryPolicy.newBuilder() + .setMaxNumberOfAttempts(5) + .setFirstRetryInterval(Duration.ofSeconds(1)) + .build(); + WorkflowTaskOptions options = new WorkflowTaskOptions(retryPolicy); + ArgumentCaptor captor = ArgumentCaptor.forClass(TaskOptions.class); + + context.callActivity(expectedName, expectedInput, options, String.class); + + verify(mockInnerContext, times(1)) + .callActivity(eq(expectedName), eq(expectedInput), captor.capture(), eq(String.class)); + + assertEquals(Duration.ZERO, captor.getValue().getRetryPolicy().getMaxRetryInterval()); + } }