Skip to content

Commit f015d81

Browse files
committed
update the validation logic to match the backend
1 parent 3d58aa4 commit f015d81

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

sdk/src/main/java/software/amazon/lambda/durable/execution/ExecutionManager.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import software.amazon.awssdk.services.lambda.model.OperationStatus;
2121
import software.amazon.awssdk.services.lambda.model.OperationUpdate;
2222
import software.amazon.lambda.durable.DurableConfig;
23-
import software.amazon.lambda.durable.exception.IllegalDurableOperationException;
2423
import software.amazon.lambda.durable.exception.UnrecoverableDurableExecutionException;
2524
import software.amazon.lambda.durable.model.DurableExecutionInput;
2625
import software.amazon.lambda.durable.operation.BaseDurableOperation;
@@ -231,14 +230,16 @@ public void deregisterActiveThread(String threadId) {
231230
}
232231

233232
private void preSuspendCheck() {
234-
operationStorage.values().stream()
235-
.filter(op -> !isTerminalStatus(op.status()))
236-
.findFirst()
237-
.ifPresentOrElse(op -> logger.debug("Found waiting operations"), () -> {
238-
logger.warn("Invalid suspension. No operation is in progress");
239-
terminateExecution(new IllegalDurableOperationException(
240-
"Cannot suspend execution without an operation in progress"));
241-
});
233+
if (operationStorage.values().stream().anyMatch(o -> switch (o.type()) {
234+
case STEP -> o.status() == OperationStatus.PENDING;
235+
case WAIT, CALLBACK -> o.status() == OperationStatus.STARTED;
236+
case CHAINED_INVOKE -> o.status() == OperationStatus.PENDING || o.status() == OperationStatus.STARTED;
237+
default -> false;
238+
})) {
239+
logger.debug("Found pending operations. Good to suspend now.");
240+
} else {
241+
logger.warn("Invalid suspension. No operation is in progress");
242+
}
242243
}
243244

244245
// ===== Checkpointing =====

0 commit comments

Comments
 (0)