From 28df24bebe0aa054c8cd2bccad4df6d9e72551c9 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Mon, 20 Apr 2026 14:44:12 -0700 Subject: [PATCH 1/2] fix the result size in ParallelResult --- .../amazon/lambda/durable/ParallelIntegrationTest.java | 6 ++---- .../amazon/lambda/durable/operation/ParallelOperation.java | 6 +++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java b/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java index 9d3501357..45c546a2d 100644 --- a/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java +++ b/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java @@ -1142,10 +1142,8 @@ void testParallelWithFirstSuccessful_earlyTermination(NestingType nestingType, i var result = parallel.get(); assertEquals(ConcurrencyCompletionStatus.MIN_SUCCESSFUL_REACHED, result.completionStatus()); assertTrue(result.completionStatus().isSucceeded()); - // todo: the result is constructed when handling parallel completion, - // which might be earlier than the last branch is added. - assertTrue(result.size() <= 3); - assertTrue(result.succeeded() <= result.size()); + assertEquals(3, result.size()); + assertTrue(result.succeeded() <= 3); assertTrue(1 <= result.succeeded()); return "done"; diff --git a/sdk/src/main/java/software/amazon/lambda/durable/operation/ParallelOperation.java b/sdk/src/main/java/software/amazon/lambda/durable/operation/ParallelOperation.java index 07eaa2ae5..ecd896921 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/operation/ParallelOperation.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/operation/ParallelOperation.java @@ -127,7 +127,11 @@ protected void replay(Operation existing) { @Override public ParallelResult get() { join(); - return cachedResult; + return new ParallelResult( + getBranches().size(), // size might be updated after cached result is built + cachedResult.succeeded(), + cachedResult.failed(), + cachedResult.completionStatus()); } /** Calls {@link #get()} if not already called. Guarantees that the context is closed. */ From 753bf54df24efd964062840d7c632ef124f63312 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Mon, 20 Apr 2026 16:23:55 -0700 Subject: [PATCH 2/2] fix test cases for nesting mode --- .../amazon/lambda/durable/ParallelIntegrationTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java b/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java index 45c546a2d..51e0147fc 100644 --- a/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java +++ b/sdk-integration-tests/src/test/java/software/amazon/lambda/durable/ParallelIntegrationTest.java @@ -1151,6 +1151,12 @@ void testParallelWithFirstSuccessful_earlyTermination(NestingType nestingType, i var result = runner.runUntilComplete("test"); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); - assertEquals(events, result.getHistoryEvents().size()); + if (nestingType == NestingType.FLAT) { + assertEquals(2, result.getHistoryEvents().size()); + } else { + // might 4 if only 1 branch completed and at most 8 if all branches completed + assertTrue(4 <= result.getHistoryEvents().size()); + assertTrue(result.getHistoryEvents().size() <= events); + } } }