|
50 | 50 | import io.temporal.api.common.v1.WorkflowExecution; |
51 | 51 | import io.temporal.api.enums.v1.EventType; |
52 | 52 | import io.temporal.api.enums.v1.QueryRejectCondition; |
| 53 | +import io.temporal.api.enums.v1.RetryState; |
53 | 54 | import io.temporal.api.enums.v1.TimeoutType; |
54 | 55 | import io.temporal.api.enums.v1.WorkflowExecutionStatus; |
55 | 56 | import io.temporal.api.enums.v1.WorkflowIdReusePolicy; |
@@ -913,6 +914,49 @@ public void testActivityApplicationFailureRetry() { |
913 | 914 | assertEquals(3, activitiesImpl.applicationFailureCounter.get()); |
914 | 915 | } |
915 | 916 |
|
| 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 | + |
916 | 960 | public static class TestActivityApplicationNoSpecifiedRetry implements TestWorkflow1 { |
917 | 961 |
|
918 | 962 | private TestActivities activities; |
|
0 commit comments