Skip to content

Commit 8144ae7

Browse files
committed
Fix timeout calculation for operation-timeout header
1 parent f6d8635 commit 8144ae7

3 files changed

Lines changed: 11 additions & 21 deletions

File tree

temporal-sdk/src/test/java/io/temporal/workflow/updateTest/UpdateWithStartTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,8 @@ public void failWhenUpdateNamesDoNotMatch() {
645645
}
646646
}
647647

648-
@SuppressWarnings("deprecation") // Backwards compatibility for WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING
648+
@SuppressWarnings(
649+
"deprecation") // Backwards compatibility for WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING
649650
@Test
650651
public void failServerSideWhenStartIsInvalid() {
651652
WorkflowClient workflowClient = testWorkflowRule.getWorkflowClient();

temporal-test-server/src/main/java/io/temporal/internal/testservice/TestWorkflowService.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -978,39 +978,27 @@ public void pollNexusTaskQueue(
978978

979979
Timestamp scheduledTime = req.getScheduledTime();
980980
Timestamp currentTime = store.currentTime();
981-
long elapsedSeconds = Timestamps.between(scheduledTime, currentTime).getSeconds();
982-
long elapsedMillis = elapsedSeconds * 1000;
981+
long elapsedMillis =
982+
com.google.protobuf.util.Durations.toMillis(
983+
Timestamps.between(scheduledTime, currentTime));
983984

984985
// Calculate minimum of all applicable timeouts
985986
Long remainingMillis = null;
986987

987-
if (!isStarted && scheduledEvent.hasScheduleToStartTimeout()) {
988-
long scheduleToStartMillis =
989-
com.google.protobuf.util.Durations.toMillis(
990-
scheduledEvent.getScheduleToStartTimeout());
991-
if (scheduleToStartMillis > 0) {
992-
long remaining = scheduleToStartMillis - elapsedMillis;
993-
remainingMillis =
994-
(remainingMillis == null) ? remaining : Math.min(remainingMillis, remaining);
995-
}
996-
}
997-
998988
if (scheduledEvent.hasStartToCloseTimeout()) {
999989
long startToCloseMillis =
1000990
com.google.protobuf.util.Durations.toMillis(scheduledEvent.getStartToCloseTimeout());
1001991
if (startToCloseMillis > 0) {
1002-
long remaining = startToCloseMillis - elapsedMillis;
1003-
remainingMillis =
1004-
(remainingMillis == null) ? remaining : Math.min(remainingMillis, remaining);
992+
remainingMillis = startToCloseMillis;
1005993
}
1006994
}
1007-
1008995
if (scheduledEvent.hasScheduleToCloseTimeout()) {
1009996
long scheduleToCloseMillis =
1010997
com.google.protobuf.util.Durations.toMillis(
1011998
scheduledEvent.getScheduleToCloseTimeout());
1012999
if (scheduleToCloseMillis > 0) {
1013-
long remaining = scheduleToCloseMillis - elapsedMillis;
1000+
// Ensure the value is positive.
1001+
long remaining = Math.max(1, scheduleToCloseMillis - elapsedMillis);
10141002
remainingMillis =
10151003
(remainingMillis == null) ? remaining : Math.min(remainingMillis, remaining);
10161004
}

temporal-test-server/src/test/java/io/temporal/testserver/functional/NexusWorkflowTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,9 +742,10 @@ public void testNexusOperationScheduleToStartTimeout() {
742742
"OPERATION_TIMEOUT should end with 'ms'", operationTimeoutHeader.endsWith("ms"));
743743
long operationTimeoutMs =
744744
Long.parseLong(operationTimeoutHeader.substring(0, operationTimeoutHeader.length() - 2));
745-
// Should be <= schedule-to-start timeout (1 second = 1000ms)
745+
// Should be <= schedule-to-close timeout (30 seconds = 30000ms)
746+
// Note: schedule-to-start timeout is not reflected in the operation-timeout header
746747
Assert.assertTrue(
747-
"OPERATION_TIMEOUT should be <= schedule-to-start timeout", operationTimeoutMs <= 1000);
748+
"OPERATION_TIMEOUT should be <= schedule-to-close timeout", operationTimeoutMs <= 30000);
748749
Assert.assertTrue("OPERATION_TIMEOUT should be positive", operationTimeoutMs > 0);
749750

750751
// Sleep longer than schedule-to-start timeout to trigger the timeout

0 commit comments

Comments
 (0)