From a99877b13887dc7027f887ba07452c5ba42f1112 Mon Sep 17 00:00:00 2001 From: sdk-sentinel-bot Date: Fri, 14 Aug 2026 23:44:02 +0000 Subject: [PATCH 1/2] Fix CI flake detected by SDK Sentinel (java) --- .../java/io/temporal/activity/ActivityNextRetryDelayTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java b/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java index e04e33ccfc..b8dccecbee 100644 --- a/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java +++ b/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java @@ -19,6 +19,7 @@ public class ActivityNextRetryDelayTest { @Rule public SDKTestWorkflowRule testWorkflowRule = SDKTestWorkflowRule.newBuilder() + .setTestTimeoutSeconds(30) .setWorkflowTypes(TestWorkflowImpl.class) .setActivityImplementations(new NextRetryDelayActivityImpl()) .build(); From b607cca2bf606566da97b85abe544a1d8778da3c Mon Sep 17 00:00:00 2001 From: sdk-sentinel-bot Date: Tue, 25 Aug 2026 14:46:39 +0000 Subject: [PATCH 2/2] Refine retry-delay test assertions SDK-Sentinel-Request: temporalio/sdk-java#3010/comment-5411842828 --- .../activity/ActivityNextRetryDelayTest.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java b/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java index b8dccecbee..60982869bf 100644 --- a/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java +++ b/temporal-sdk/src/test/java/io/temporal/activity/ActivityNextRetryDelayTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.*; +import io.temporal.common.RetryOptions; import io.temporal.failure.ApplicationFailure; import io.temporal.testing.internal.SDKTestOptions; import io.temporal.testing.internal.SDKTestWorkflowRule; @@ -10,18 +11,21 @@ import io.temporal.workflow.WorkflowMethod; import io.temporal.workflow.shared.TestActivities; import java.time.Duration; +import java.util.concurrent.atomic.AtomicInteger; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; public class ActivityNextRetryDelayTest { + private final NextRetryDelayActivityImpl activity = new NextRetryDelayActivityImpl(); + @Rule public SDKTestWorkflowRule testWorkflowRule = SDKTestWorkflowRule.newBuilder() .setTestTimeoutSeconds(30) .setWorkflowTypes(TestWorkflowImpl.class) - .setActivityImplementations(new NextRetryDelayActivityImpl()) + .setActivityImplementations(activity) .build(); @Test @@ -29,7 +33,8 @@ public void activityNextRetryDelay() { TestWorkflowReturnDuration workflow = testWorkflowRule.newWorkflowStub(TestWorkflowReturnDuration.class); Duration result = workflow.execute(false); - Assert.assertTrue(result.toMillis() > 5000 && result.toMillis() < 7000); + Assert.assertTrue(result.toMillis() > 5000); + Assert.assertEquals(4, activity.getAttemptCount()); } @Test @@ -37,7 +42,8 @@ public void localActivityNextRetryDelay() { TestWorkflowReturnDuration workflow = testWorkflowRule.newWorkflowStub(TestWorkflowReturnDuration.class); Duration result = workflow.execute(true); - Assert.assertTrue(result.toMillis() > 5000 && result.toMillis() < 7000); + Assert.assertTrue(result.toMillis() > 5000); + Assert.assertEquals(4, activity.getAttemptCount()); } @WorkflowInterface @@ -48,15 +54,22 @@ public interface TestWorkflowReturnDuration { public static class TestWorkflowImpl implements TestWorkflowReturnDuration { + private static final RetryOptions FALLBACK_RETRY_OPTIONS = + RetryOptions.newBuilder().setInitialInterval(Duration.ofMillis(100)).build(); + private final TestActivities.NoArgsActivity activities = Workflow.newActivityStub( TestActivities.NoArgsActivity.class, - SDKTestOptions.newActivityOptions20sScheduleToClose()); + SDKTestOptions.newActivityOptions20sScheduleToClose().toBuilder() + .setRetryOptions(FALLBACK_RETRY_OPTIONS) + .build()); private final TestActivities.NoArgsActivity localActivities = Workflow.newLocalActivityStub( TestActivities.NoArgsActivity.class, - SDKTestOptions.newLocalActivityOptions20sScheduleToClose()); + SDKTestOptions.newLocalActivityOptions20sScheduleToClose().toBuilder() + .setRetryOptions(FALLBACK_RETRY_OPTIONS) + .build()); @Override public Duration execute(boolean useLocalActivity) { @@ -72,8 +85,11 @@ public Duration execute(boolean useLocalActivity) { } public static class NextRetryDelayActivityImpl implements TestActivities.NoArgsActivity { + private final AtomicInteger attemptCount = new AtomicInteger(); + @Override public void execute() { + attemptCount.incrementAndGet(); int attempt = Activity.getExecutionContext().getInfo().getAttempt(); if (attempt < 4) { throw ApplicationFailure.newFailureWithCauseAndDelay( @@ -83,5 +99,9 @@ public void execute() { Duration.ofSeconds(attempt)); } } + + public int getAttemptCount() { + return attemptCount.get(); + } } }