Skip to content

Commit ff05ea1

Browse files
authored
Fix a bug in setting retry expiration while getting history (#528)
1 parent 47f7ecf commit ff05ea1

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/main/java/com/uber/cadence/internal/replay/ReplayDecider.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ private class DecisionTaskWithHistoryIteratorImpl implements DecisionTaskWithHis
598598
private final Duration paginationStart = Duration.ofMillis(System.currentTimeMillis());
599599
private Duration decisionTaskStartToCloseTimeout;
600600

601-
private final Duration retryServiceOperationExpirationInterval() {
601+
private final Duration decisionTaskRemainingTime() {
602602
Duration passed = Duration.ofMillis(System.currentTimeMillis()).minus(paginationStart);
603603
return decisionTaskStartToCloseTimeout.minus(passed);
604604
}
@@ -642,11 +642,18 @@ public HistoryEvent next() {
642642
return current.next();
643643
}
644644

645+
Duration decisionTaskRemainingTime = decisionTaskRemainingTime();
646+
if (decisionTaskRemainingTime.isNegative() || decisionTaskRemainingTime.isZero()) {
647+
throw new Error(
648+
"Decision task timed out while querying history. If this happens consistently please consider " +
649+
"increase decision task timeout or reduce history size.");
650+
}
651+
645652
metricsScope.counter(MetricsType.WORKFLOW_GET_HISTORY_COUNTER).inc(1);
646653
Stopwatch sw = metricsScope.timer(MetricsType.WORKFLOW_GET_HISTORY_LATENCY).start();
647654
RetryOptions retryOptions =
648655
new RetryOptions.Builder()
649-
.setExpiration(retryServiceOperationExpirationInterval())
656+
.setExpiration(decisionTaskRemainingTime)
650657
.setInitialInterval(retryServiceOperationInitialInterval)
651658
.setMaximumInterval(retryServiceOperationMaxInterval)
652659
.build();

0 commit comments

Comments
 (0)