Skip to content

Commit dc3a131

Browse files
authored
Copy non retryable error types list in ensureDefaultFieldsForActivity (#223)
* Copy non retryable error types list in ensureDefaultFieldsForActivityRetryPolicy * Add a test for non-retryable error scenario
1 parent 44c495a commit dc3a131

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

temporal-sdk/src/main/java/io/temporal/internal/testservice/StateMachines.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,7 @@ static RetryPolicy ensureDefaultFieldsForActivityRetryPolicy(RetryPolicy origina
18841884

18851885
return RetryPolicy.newBuilder()
18861886
.setInitialInterval(initialInterval)
1887+
.addAllNonRetryableErrorTypes(originalPolicy.getNonRetryableErrorTypesList())
18871888
.setMaximumInterval(
18881889
Durations.compare(originalPolicy.getMaximumInterval(), Durations.ZERO) == 0
18891890
? Durations.fromMillis(

temporal-sdk/src/test/java/io/temporal/workflow/WorkflowTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import io.temporal.api.common.v1.WorkflowExecution;
5151
import io.temporal.api.enums.v1.EventType;
5252
import io.temporal.api.enums.v1.QueryRejectCondition;
53+
import io.temporal.api.enums.v1.RetryState;
5354
import io.temporal.api.enums.v1.TimeoutType;
5455
import io.temporal.api.enums.v1.WorkflowExecutionStatus;
5556
import io.temporal.api.enums.v1.WorkflowIdReusePolicy;
@@ -913,6 +914,49 @@ public void testActivityApplicationFailureRetry() {
913914
assertEquals(3, activitiesImpl.applicationFailureCounter.get());
914915
}
915916

917+
public static class TestActivityApplicationFailureNonRetryable implements TestWorkflow1 {
918+
919+
private TestActivities activities;
920+
921+
@Override
922+
public String execute(String taskQueue) {
923+
ActivityOptions options =
924+
ActivityOptions.newBuilder()
925+
.setTaskQueue(taskQueue)
926+
.setScheduleToCloseTimeout(Duration.ofSeconds(200))
927+
.setStartToCloseTimeout(Duration.ofSeconds(1))
928+
.setRetryOptions(
929+
RetryOptions.newBuilder()
930+
.setMaximumInterval(Duration.ofSeconds(1))
931+
.setDoNotRetry(IOException.class.getName())
932+
.build())
933+
.build();
934+
activities = Workflow.newActivityStub(TestActivities.class, options);
935+
activities.throwIO();
936+
return "ignored";
937+
}
938+
}
939+
940+
@Test
941+
public void testActivityApplicationFailureNonRetryable() {
942+
startWorkerFor(TestActivityApplicationFailureNonRetryable.class);
943+
TestWorkflow1 workflowStub =
944+
workflowClient.newWorkflowStub(
945+
TestWorkflow1.class, newWorkflowOptionsBuilder(taskQueue).build());
946+
try {
947+
workflowStub.execute(taskQueue);
948+
fail("unreachable");
949+
} catch (WorkflowException e) {
950+
assertTrue(e.getCause() instanceof ActivityFailure);
951+
assertTrue(e.getCause().getCause() instanceof ApplicationFailure);
952+
assertEquals("java.io.IOException", ((ApplicationFailure) e.getCause().getCause()).getType());
953+
assertEquals(
954+
RetryState.RETRY_STATE_NON_RETRYABLE_FAILURE,
955+
((ActivityFailure) e.getCause()).getRetryState());
956+
}
957+
assertEquals(activitiesImpl.toString(), 1, activitiesImpl.invocations.size());
958+
}
959+
916960
public static class TestActivityApplicationNoSpecifiedRetry implements TestWorkflow1 {
917961

918962
private TestActivities activities;

0 commit comments

Comments
 (0)