From 5acdf2ff1b63b15855d9468d5e834fed2fd5e05d Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 14:37:05 -0700 Subject: [PATCH 01/12] add test cases for virtual thread pool --- examples/pom.xml | 26 +++++++ ...anyAsyncStepsVirtualThreadPoolExample.java | 78 +++++++++++++++++++ .../examples/CloudBasedIntegrationTest.java | 2 +- ...AsyncStepsVirtualTheadPoolExampleTest.java | 68 ++++++++++++++++ 4 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java create mode 100644 examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java diff --git a/examples/pom.xml b/examples/pom.xml index 9a5b0f9b6..d10e9ba99 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -79,6 +79,32 @@ + + + exclude-java21-code-on-lower-jdk + + + (,21) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 3.13.0 + + + + software/amazon/lambda/durable/examples/vt + + + + + + + + diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java b/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java new file mode 100644 index 000000000..7fb1f1b8e --- /dev/null +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java @@ -0,0 +1,78 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package software.amazon.lambda.durable.examples.vt; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import software.amazon.lambda.durable.DurableConfig; +import software.amazon.lambda.durable.DurableContext; +import software.amazon.lambda.durable.DurableFuture; +import software.amazon.lambda.durable.DurableHandler; + +/** + * Performance test example demonstrating concurrent async steps. + * + *

This example tests the SDK's ability to handle many concurrent operations: + * + *

    + *
  • Creates async steps in a loop + *
  • Each step performs a simple computation + *
  • All results are collected using {@link DurableFuture#allOf} + *
+ */ +public class ManyAsyncStepsVirtualThreadPoolExample + extends DurableHandler< + ManyAsyncStepsVirtualThreadPoolExample.Input, ManyAsyncStepsVirtualThreadPoolExample.Output> { + + public record Input(int multiplier, int steps) {} + + public record Output(long result, long executionTimeMs, long replayTimeMs) {} + + @Override + public Output handleRequest(Input input, DurableContext context) { + var startTime = System.nanoTime(); + var multiplier = input.multiplier(); + var steps = input.steps(); + var logger = context.getLogger(); + + logger.info("Starting {} async steps with multiplier {}", steps, multiplier); + + // Create async steps + var futures = new ArrayList>(steps); + for (var i = 0; i < steps; i++) { + var index = i; + var future = context.stepAsync("compute-" + i, Integer.class, stepCtx -> index * multiplier); + futures.add(future); + } + + logger.info("All {} async steps created, collecting results", steps); + + // Collect all results using allOf + var results = DurableFuture.allOf(futures); + var totalSum = results.stream().mapToInt(Integer::intValue).sum(); + + // checkpoint the executionTime so that we can have the same value when replay + var executionTimeMs = context.step( + "execution-time", Long.class, stepCtx -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime)); + logger.info("Completed {} steps, total sum: {}, execution time: {}ms", steps, totalSum, executionTimeMs); + + // Wait 2 seconds to test replay + context.wait("post-compute-wait", Duration.ofSeconds(2)); + + var replayTimeMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime); + + return new Output(totalSum, executionTimeMs, replayTimeMs); + } + + @Override + protected DurableConfig createConfiguration() { + // Add a small checkpoint delay to help batch the checkpoint requests and reduce the overall latencies + // when the function has many concurrent operations + return DurableConfig.builder() + .withCheckpointDelay(Duration.ofMillis(10)) + .withExecutorService(Executors.newVirtualThreadPerTaskExecutor()) + .build(); + } +} diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java index 6f809513e..44c25c7cd 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java @@ -544,7 +544,7 @@ void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayT assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); var finalResult = result.getResult(); - System.out.printf("ManyAsyncStepsExample result (%d steps): %s\n", steps, finalResult); + System.out.printf("ManyAsyncStepsVirtualThreadPoolExample result (%d steps): %s\n", steps, finalResult); assertNotNull(finalResult); assertEquals((long) steps * (steps - 1), finalResult.result()); // Sum of 0..steps * 2 diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java new file mode 100644 index 000000000..7501ab0d1 --- /dev/null +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java @@ -0,0 +1,68 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package software.amazon.lambda.durable.examples.vt; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledForJreRange; +import org.junit.jupiter.api.condition.JRE; +import software.amazon.lambda.durable.model.ExecutionStatus; +import software.amazon.lambda.durable.testing.LocalDurableTestRunner; + +@EnabledForJreRange(min = JRE.JAVA_21) +class ManyAsyncStepsVirtualTheadPoolExampleTest { + + @Test + void testManyAsyncSteps() { + var handler = new ManyAsyncStepsVirtualThreadPoolExample(); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + + var input = new ManyAsyncStepsVirtualThreadPoolExample.Input(2, 500); + var result = runner.runUntilComplete(input); + + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); + + var output = result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class); + assertNotNull(output); + + // Sum of 0..499 * 2 = 499 * 500 / 2 * 2 = 249500 + assertEquals( + 249500, + result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class) + .result()); + } + + @Test + void testManyAsyncStepsWithDefaultMultiplier() { + var handler = new ManyAsyncStepsVirtualThreadPoolExample(); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + + var input = new ManyAsyncStepsVirtualThreadPoolExample.Input(1, 500); + var result = runner.runUntilComplete(input); + + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); + + // Sum of 0..499 = 499 * 500 / 2 = 124750 + assertEquals( + 124750, + result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class) + .result()); + } + + @Test + void testOperationsAreTracked() { + var handler = new ManyAsyncStepsVirtualThreadPoolExample(); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + + var result = runner.runUntilComplete(new ManyAsyncStepsVirtualThreadPoolExample.Input(1, 500)); + + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); + + // Verify some operations are tracked + assertNotNull(result.getOperation("compute-0")); + assertNotNull(result.getOperation("compute-499")); + assertNotNull(result.getOperation("compute-250")); + } +} From 6112884cb67ae464c60d985e21c9ca15df39be48 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 14:43:43 -0700 Subject: [PATCH 02/12] exclude *.java --- examples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pom.xml b/examples/pom.xml index d10e9ba99..28b305bcc 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -96,7 +96,7 @@ - software/amazon/lambda/durable/examples/vt + software/amazon/lambda/durable/examples/vt/*.java
From d70598592405bba9fb38f140486c7777c92b9a50 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 14:51:03 -0700 Subject: [PATCH 03/12] exclude test cases --- examples/pom.xml | 57 ++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 28b305bcc..e6221f8dc 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -79,32 +79,6 @@ - - - exclude-java21-code-on-lower-jdk - - - (,21) - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 3.13.0 - - - - software/amazon/lambda/durable/examples/vt/*.java - - - - - - - - @@ -166,4 +140,35 @@ + + + + exclude-virtual-threads + + [,21) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + **/vt/ManyAsyncStepsVirtualThreadPoolExample.java + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java + + + + + + + From 6d60b4e3d86fabb7d9ddd71f454ca8dbf0a051a8 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 14:56:53 -0700 Subject: [PATCH 04/12] fix typo --- ...est.java => ManyAsyncStepsVirtualThreadPoolExampleTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename examples/src/test/java/software/amazon/lambda/durable/examples/vt/{ManyAsyncStepsVirtualTheadPoolExampleTest.java => ManyAsyncStepsVirtualThreadPoolExampleTest.java} (98%) diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java similarity index 98% rename from examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java rename to examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java index 7501ab0d1..9041b5706 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualTheadPoolExampleTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java @@ -12,7 +12,7 @@ import software.amazon.lambda.durable.testing.LocalDurableTestRunner; @EnabledForJreRange(min = JRE.JAVA_21) -class ManyAsyncStepsVirtualTheadPoolExampleTest { +class ManyAsyncStepsVirtualThreadPoolExampleTest { @Test void testManyAsyncSteps() { From b1d1d649f84cbe54384b3cd7639a51b3c164a630 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 14:59:45 -0700 Subject: [PATCH 05/12] create virtual thread pool test function --- examples/template.yaml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/examples/template.yaml b/examples/template.yaml index 36adfc5a5..f89fc45c6 100644 --- a/examples/template.yaml +++ b/examples/template.yaml @@ -15,6 +15,15 @@ Parameters: Default: 'java17' Description: Java runtime version +Conditions: + IsJava21OrLater: + !Or + - !Equals [!Ref JavaVersion, 'java21'] + - !Equals [!Ref JavaVersion, 'java22'] + - !Equals [!Ref JavaVersion, 'java23'] + - !Equals [!Ref JavaVersion, 'java24'] + - !Equals [!Ref JavaVersion, 'java25'] + Globals: Function: Timeout: 900 @@ -392,6 +401,24 @@ Resources: - lambda:GetDurableExecutionState Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:concurrent-wait-for-condition-example-${JavaVersion}-runtime" + ManyAsyncStepsVirtualThreadPoolExampleFunction: + Type: AWS::Serverless::Function + Condition: IsJava21OrLater + Properties: + FunctionName: !Join + - '-' + - - 'many-async-steps-virtual-thread-pool-example' + - !Ref JavaVersion + - runtime + Handler: "software.amazon.lambda.durable.examples.vt.ManyAsyncStepsVirtualThreadPoolExample" + Policies: + - Statement: + - Effect: Allow + Action: + - lambda:CheckpointDurableExecutions + - lambda:GetDurableExecutionState + Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:many-async-steps-virtual-thread-pool-example-${JavaVersion}-runtime" + Outputs: NoopExampleFunction: Description: Noop Example Function ARN @@ -480,3 +507,8 @@ Outputs: ConcurrentWaitForConditionExampleFunction: Description: Concurrent Wait For Condition Example Function ARN Value: !GetAtt ConcurrentWaitForConditionExampleFunction.Arn + + ManyAsyncStepsVirtualThreadPoolExampleFunction: + Condition: IsJava21OrLater + Description: Many Async Steps Virtual Thread Pool Example Function ARN + Value: !GetAtt ManyAsyncStepsVirtualThreadPoolExampleFunction.Arn From 05df9ff833b6d475c080fdd2404bd5e04ca60cb4 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:02:14 -0700 Subject: [PATCH 06/12] exclude test cases --- examples/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/pom.xml b/examples/pom.xml index e6221f8dc..f4b8ce755 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -156,6 +156,9 @@ **/vt/ManyAsyncStepsVirtualThreadPoolExample.java + + **/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java + From a5583d72735592ff4911c801df4d18f668e5a8c0 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:10:59 -0700 Subject: [PATCH 07/12] add vt to cloud tests --- .../examples/CloudBasedIntegrationTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java index 44c25c7cd..9f8e435b2 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java @@ -529,13 +529,20 @@ void testChildContextExample() { } @ParameterizedTest - @CsvSource({"100, 1000, 20", "500, 2000, 30", "1000, 3000, 50"}) - void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayTime) { + @CsvSource({ + "many-async-steps-example, 100, 1000, 20", + "many-async-steps-example, 500, 2000, 30", + "many-async-steps-example, 1000, 3000, 50", + "many-async-steps-virtual-thread-pool-example, 100, 1000, 20", + "many-async-steps-virtual-thread-pool-example, 500, 2000, 30", + "many-async-steps-virtual-thread-pool-example, 1000, 3000, 50", + }) + void testManyAsyncStepsExample(String functionName, int steps, long maxExecutionTime, long maxReplayTime) { long minimalExecutionTimeMs = Long.MAX_VALUE; long minimalReplayTimeMs = Long.MAX_VALUE; for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { var runner = CloudDurableTestRunner.create( - arn("many-async-steps-example"), + arn(functionName), ManyAsyncStepsExample.Input.class, ManyAsyncStepsExample.Output.class, lambdaClient); @@ -544,7 +551,7 @@ void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayT assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); var finalResult = result.getResult(); - System.out.printf("ManyAsyncStepsVirtualThreadPoolExample result (%d steps): %s\n", steps, finalResult); + System.out.printf("%s result (%d steps): %s\n", functionName, steps, finalResult); assertNotNull(finalResult); assertEquals((long) steps * (steps - 1), finalResult.result()); // Sum of 0..steps * 2 From e89c520a812f7ac9b361cbf8a0f99b88be19b8ae Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:12:32 -0700 Subject: [PATCH 08/12] remove non-existent java versions --- examples/template.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/template.yaml b/examples/template.yaml index f89fc45c6..4f02619f3 100644 --- a/examples/template.yaml +++ b/examples/template.yaml @@ -19,9 +19,6 @@ Conditions: IsJava21OrLater: !Or - !Equals [!Ref JavaVersion, 'java21'] - - !Equals [!Ref JavaVersion, 'java22'] - - !Equals [!Ref JavaVersion, 'java23'] - - !Equals [!Ref JavaVersion, 'java24'] - !Equals [!Ref JavaVersion, 'java25'] Globals: From 1580c9b0f8efc40804fc65da4a8d3b4a5847c0d3 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:24:49 -0700 Subject: [PATCH 09/12] exclude e2e tests --- .../examples/CloudBasedIntegrationTest.java | 56 +++++++++++++++---- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java index 9f8e435b2..30a8ce200 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java @@ -12,7 +12,9 @@ import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledForJreRange; import org.junit.jupiter.api.condition.EnabledIf; +import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; @@ -27,6 +29,7 @@ import software.amazon.lambda.durable.examples.step.ManyAsyncStepsExample; import software.amazon.lambda.durable.examples.types.ApprovalRequest; import software.amazon.lambda.durable.examples.types.GreetingRequest; +import software.amazon.lambda.durable.examples.vt.ManyAsyncStepsVirtualThreadPoolExample; import software.amazon.lambda.durable.examples.wait.ConcurrentWaitForConditionExample; import software.amazon.lambda.durable.model.ExecutionStatus; import software.amazon.lambda.durable.serde.JacksonSerDes; @@ -529,20 +532,13 @@ void testChildContextExample() { } @ParameterizedTest - @CsvSource({ - "many-async-steps-example, 100, 1000, 20", - "many-async-steps-example, 500, 2000, 30", - "many-async-steps-example, 1000, 3000, 50", - "many-async-steps-virtual-thread-pool-example, 100, 1000, 20", - "many-async-steps-virtual-thread-pool-example, 500, 2000, 30", - "many-async-steps-virtual-thread-pool-example, 1000, 3000, 50", - }) - void testManyAsyncStepsExample(String functionName, int steps, long maxExecutionTime, long maxReplayTime) { + @CsvSource({"100, 1000, 20", "500, 2000, 30", "1000, 3000, 50"}) + void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayTime) { long minimalExecutionTimeMs = Long.MAX_VALUE; long minimalReplayTimeMs = Long.MAX_VALUE; for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { var runner = CloudDurableTestRunner.create( - arn(functionName), + arn("many-async-steps-example"), ManyAsyncStepsExample.Input.class, ManyAsyncStepsExample.Output.class, lambdaClient); @@ -551,7 +547,45 @@ void testManyAsyncStepsExample(String functionName, int steps, long maxExecution assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); var finalResult = result.getResult(); - System.out.printf("%s result (%d steps): %s\n", functionName, steps, finalResult); + System.out.printf("ManyAsyncStepsVirtualThreadPoolExample result (%d steps): %s\n", steps, finalResult); + assertNotNull(finalResult); + assertEquals((long) steps * (steps - 1), finalResult.result()); // Sum of 0..steps * 2 + + // Verify some operations are tracked + assertNotNull(runner.getOperation("compute-0")); + assertNotNull(runner.getOperation("compute-" + (steps - 1))); + + if (finalResult.executionTimeMs() < minimalExecutionTimeMs) { + minimalExecutionTimeMs = finalResult.executionTimeMs(); + } + + if (finalResult.replayTimeMs() < minimalReplayTimeMs) { + minimalReplayTimeMs = finalResult.replayTimeMs(); + } + } + + assertTrue(minimalReplayTimeMs < maxReplayTime); + assertTrue(minimalExecutionTimeMs < maxExecutionTime); + } + + @EnabledForJreRange(min = JRE.JAVA_21) + @ParameterizedTest + @CsvSource({"100, 1000, 20", "500, 2000, 30", "1000, 3000, 50"}) + void testManyAsyncStepsVirtualThreadExample(int steps, long maxExecutionTime, long maxReplayTime) { + long minimalExecutionTimeMs = Long.MAX_VALUE; + long minimalReplayTimeMs = Long.MAX_VALUE; + for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { + var runner = CloudDurableTestRunner.create( + arn("many-async-steps-virtual-thread-pool-example"), + ManyAsyncStepsVirtualThreadPoolExample.Input.class, + ManyAsyncStepsVirtualThreadPoolExample.Output.class, + lambdaClient); + var result = runner.run(new ManyAsyncStepsVirtualThreadPoolExample.Input(2, steps)); + + assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); + + var finalResult = result.getResult(); + System.out.printf("ManyAsyncStepsVirtualThreadPoolExample result (%d steps): %s\n", steps, finalResult); assertNotNull(finalResult); assertEquals((long) steps * (steps - 1), finalResult.result()); // Sum of 0..steps * 2 From 5ad31a14056f8e95df7672160da07211686f230b Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:33:28 -0700 Subject: [PATCH 10/12] fix type error --- .../child/ManyAsyncChildContextExample.java | 13 ++++------ .../examples/step/ManyAsyncStepsExample.java | 12 ++++----- .../examples/types/ManyAsyncStepsInput.java | 5 ++++ .../examples/types/ManyAsyncStepsOutput.java | 5 ++++ ...anyAsyncStepsVirtualThreadPoolExample.java | 14 ++++------ .../examples/CloudBasedIntegrationTest.java | 23 ++++++++-------- .../ManyAsyncChildContextExampleTest.java | 21 +++++++-------- .../step/ManyAsyncStepsExampleTest.java | 22 ++++++++-------- ...syncStepsVirtualThreadPoolExampleTest.java | 26 ++++++++----------- 9 files changed, 68 insertions(+), 73 deletions(-) create mode 100644 examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsInput.java create mode 100644 examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsOutput.java diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExample.java b/examples/src/main/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExample.java index 797d5ce4d..e753127fd 100644 --- a/examples/src/main/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExample.java +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExample.java @@ -9,6 +9,8 @@ import software.amazon.lambda.durable.DurableContext; import software.amazon.lambda.durable.DurableFuture; import software.amazon.lambda.durable.DurableHandler; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; /** * Performance test example demonstrating concurrent async child contexts. @@ -21,15 +23,10 @@ *
  • All results are collected using {@link DurableFuture#allOf} * */ -public class ManyAsyncChildContextExample - extends DurableHandler { - - public record Input(int multiplier, int steps) {} - - public record Output(long result, long executionTimeMs, long replayTimeMs) {} +public class ManyAsyncChildContextExample extends DurableHandler { @Override - public Output handleRequest(Input input, DurableContext context) { + public ManyAsyncStepsOutput handleRequest(ManyAsyncStepsInput input, DurableContext context) { var startTime = System.nanoTime(); var multiplier = input.multiplier(); var steps = input.steps(); @@ -65,7 +62,7 @@ public Output handleRequest(Input input, DurableContext context) { var replayTimeMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime); - return new Output(totalSum, executionTimeMs, replayTimeMs); + return new ManyAsyncStepsOutput(totalSum, executionTimeMs, replayTimeMs); } @Override diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExample.java b/examples/src/main/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExample.java index bad4fde75..2afae9ac4 100644 --- a/examples/src/main/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExample.java +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExample.java @@ -9,6 +9,8 @@ import software.amazon.lambda.durable.DurableContext; import software.amazon.lambda.durable.DurableFuture; import software.amazon.lambda.durable.DurableHandler; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; /** * Performance test example demonstrating concurrent async steps. @@ -21,14 +23,10 @@ *
  • All results are collected using {@link DurableFuture#allOf} * */ -public class ManyAsyncStepsExample extends DurableHandler { - - public record Input(int multiplier, int steps) {} - - public record Output(long result, long executionTimeMs, long replayTimeMs) {} +public class ManyAsyncStepsExample extends DurableHandler { @Override - public Output handleRequest(Input input, DurableContext context) { + public ManyAsyncStepsOutput handleRequest(ManyAsyncStepsInput input, DurableContext context) { var startTime = System.nanoTime(); var multiplier = input.multiplier(); var steps = input.steps(); @@ -60,7 +58,7 @@ public Output handleRequest(Input input, DurableContext context) { var replayTimeMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime); - return new Output(totalSum, executionTimeMs, replayTimeMs); + return new ManyAsyncStepsOutput(totalSum, executionTimeMs, replayTimeMs); } @Override diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsInput.java b/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsInput.java new file mode 100644 index 000000000..de3a21a11 --- /dev/null +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsInput.java @@ -0,0 +1,5 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package software.amazon.lambda.durable.examples.types; + +public record ManyAsyncStepsInput(int multiplier, int steps) {} diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsOutput.java b/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsOutput.java new file mode 100644 index 000000000..eb66a87d7 --- /dev/null +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/types/ManyAsyncStepsOutput.java @@ -0,0 +1,5 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +package software.amazon.lambda.durable.examples.types; + +public record ManyAsyncStepsOutput(long result, long executionTimeMs, long replayTimeMs) {} diff --git a/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java b/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java index 7fb1f1b8e..bc8364e1a 100644 --- a/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java +++ b/examples/src/main/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExample.java @@ -10,6 +10,8 @@ import software.amazon.lambda.durable.DurableContext; import software.amazon.lambda.durable.DurableFuture; import software.amazon.lambda.durable.DurableHandler; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; /** * Performance test example demonstrating concurrent async steps. @@ -22,16 +24,10 @@ *
  • All results are collected using {@link DurableFuture#allOf} * */ -public class ManyAsyncStepsVirtualThreadPoolExample - extends DurableHandler< - ManyAsyncStepsVirtualThreadPoolExample.Input, ManyAsyncStepsVirtualThreadPoolExample.Output> { - - public record Input(int multiplier, int steps) {} - - public record Output(long result, long executionTimeMs, long replayTimeMs) {} +public class ManyAsyncStepsVirtualThreadPoolExample extends DurableHandler { @Override - public Output handleRequest(Input input, DurableContext context) { + public ManyAsyncStepsOutput handleRequest(ManyAsyncStepsInput input, DurableContext context) { var startTime = System.nanoTime(); var multiplier = input.multiplier(); var steps = input.steps(); @@ -63,7 +59,7 @@ public Output handleRequest(Input input, DurableContext context) { var replayTimeMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime); - return new Output(totalSum, executionTimeMs, replayTimeMs); + return new ManyAsyncStepsOutput(totalSum, executionTimeMs, replayTimeMs); } @Override diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java index 30a8ce200..bd2ce37f5 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java @@ -24,12 +24,11 @@ import software.amazon.awssdk.services.lambda.model.OperationStatus; import software.amazon.awssdk.services.sts.StsClient; import software.amazon.lambda.durable.TypeToken; -import software.amazon.lambda.durable.examples.child.ManyAsyncChildContextExample; import software.amazon.lambda.durable.examples.general.GenericTypesExample; -import software.amazon.lambda.durable.examples.step.ManyAsyncStepsExample; import software.amazon.lambda.durable.examples.types.ApprovalRequest; import software.amazon.lambda.durable.examples.types.GreetingRequest; -import software.amazon.lambda.durable.examples.vt.ManyAsyncStepsVirtualThreadPoolExample; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; import software.amazon.lambda.durable.examples.wait.ConcurrentWaitForConditionExample; import software.amazon.lambda.durable.model.ExecutionStatus; import software.amazon.lambda.durable.serde.JacksonSerDes; @@ -539,10 +538,10 @@ void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayT for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { var runner = CloudDurableTestRunner.create( arn("many-async-steps-example"), - ManyAsyncStepsExample.Input.class, - ManyAsyncStepsExample.Output.class, + ManyAsyncStepsInput.class, + ManyAsyncStepsOutput.class, lambdaClient); - var result = runner.run(new ManyAsyncStepsExample.Input(2, steps)); + var result = runner.run(new ManyAsyncStepsInput(2, steps)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); @@ -577,10 +576,10 @@ void testManyAsyncStepsVirtualThreadExample(int steps, long maxExecutionTime, lo for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { var runner = CloudDurableTestRunner.create( arn("many-async-steps-virtual-thread-pool-example"), - ManyAsyncStepsVirtualThreadPoolExample.Input.class, - ManyAsyncStepsVirtualThreadPoolExample.Output.class, + ManyAsyncStepsInput.class, + ManyAsyncStepsOutput.class, lambdaClient); - var result = runner.run(new ManyAsyncStepsVirtualThreadPoolExample.Input(2, steps)); + var result = runner.run(new ManyAsyncStepsInput(2, steps)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); @@ -615,10 +614,10 @@ void testManyAsyncChildContextExample(int steps, long maxExecutionTime, long max for (var i = 0; i < PERFORMANCE_TEST_REPEAT; i++) { var runner = CloudDurableTestRunner.create( arn("many-async-child-context-example"), - ManyAsyncChildContextExample.Input.class, - ManyAsyncChildContextExample.Output.class, + ManyAsyncStepsInput.class, + ManyAsyncStepsOutput.class, lambdaClient); - var result = runner.run(new ManyAsyncChildContextExample.Input(2, steps)); + var result = runner.run(new ManyAsyncStepsInput(2, steps)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExampleTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExampleTest.java index 94e5ff097..24bf18f21 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExampleTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/child/ManyAsyncChildContextExampleTest.java @@ -6,7 +6,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.Test; -import software.amazon.lambda.durable.examples.step.ManyAsyncStepsExample; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; import software.amazon.lambda.durable.model.ExecutionStatus; import software.amazon.lambda.durable.testing.LocalDurableTestRunner; @@ -15,14 +16,14 @@ class ManyAsyncChildContextExampleTest { @Test void testManyAsyncSteps() { var handler = new ManyAsyncChildContextExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncChildContextExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncChildContextExample.Input(2, 500); + var input = new ManyAsyncStepsInput(2, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); - var output = result.getResult(ManyAsyncStepsExample.Output.class); + var output = result.getResult(ManyAsyncStepsOutput.class); assertNotNull(output); // Sum of 0..499 * 2 = 499 * 500 / 2 * 2 = 249500 @@ -32,25 +33,23 @@ void testManyAsyncSteps() { @Test void testManyAsyncStepsWithDefaultMultiplier() { var handler = new ManyAsyncChildContextExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncChildContextExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncChildContextExample.Input(1, 500); + var input = new ManyAsyncStepsInput(1, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); // Sum of 0..499 = 499 * 500 / 2 = 124750 - assertEquals( - 124750, - result.getResult(ManyAsyncChildContextExample.Output.class).result()); + assertEquals(124750, result.getResult(ManyAsyncStepsOutput.class).result()); } @Test void testOperationsAreTracked() { var handler = new ManyAsyncChildContextExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncChildContextExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var result = runner.runUntilComplete(new ManyAsyncChildContextExample.Input(1, 500)); + var result = runner.runUntilComplete(new ManyAsyncStepsInput(1, 500)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExampleTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExampleTest.java index 287d5bd96..5d8102ecf 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExampleTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/step/ManyAsyncStepsExampleTest.java @@ -5,6 +5,8 @@ import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; import software.amazon.lambda.durable.model.ExecutionStatus; import software.amazon.lambda.durable.testing.LocalDurableTestRunner; @@ -13,42 +15,40 @@ class ManyAsyncStepsExampleTest { @Test void testManyAsyncSteps() { var handler = new ManyAsyncStepsExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncStepsExample.Input(2, 500); + var input = new ManyAsyncStepsInput(2, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); - var output = result.getResult(ManyAsyncStepsExample.Output.class); + var output = result.getResult(ManyAsyncStepsOutput.class); assertNotNull(output); // Sum of 0..499 * 2 = 499 * 500 / 2 * 2 = 249500 - assertEquals( - 249500, result.getResult(ManyAsyncStepsExample.Output.class).result()); + assertEquals(249500, result.getResult(ManyAsyncStepsOutput.class).result()); } @Test void testManyAsyncStepsWithDefaultMultiplier() { var handler = new ManyAsyncStepsExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncStepsExample.Input(1, 500); + var input = new ManyAsyncStepsInput(1, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); // Sum of 0..499 = 499 * 500 / 2 = 124750 - assertEquals( - 124750, result.getResult(ManyAsyncStepsExample.Output.class).result()); + assertEquals(124750, result.getResult(ManyAsyncStepsOutput.class).result()); } @Test void testOperationsAreTracked() { var handler = new ManyAsyncStepsExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var result = runner.runUntilComplete(new ManyAsyncStepsExample.Input(1, 500)); + var result = runner.runUntilComplete(new ManyAsyncStepsInput(1, 500)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java index 9041b5706..dd15e437f 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/vt/ManyAsyncStepsVirtualThreadPoolExampleTest.java @@ -8,6 +8,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledForJreRange; import org.junit.jupiter.api.condition.JRE; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsInput; +import software.amazon.lambda.durable.examples.types.ManyAsyncStepsOutput; import software.amazon.lambda.durable.model.ExecutionStatus; import software.amazon.lambda.durable.testing.LocalDurableTestRunner; @@ -17,46 +19,40 @@ class ManyAsyncStepsVirtualThreadPoolExampleTest { @Test void testManyAsyncSteps() { var handler = new ManyAsyncStepsVirtualThreadPoolExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncStepsVirtualThreadPoolExample.Input(2, 500); + var input = new ManyAsyncStepsInput(2, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); - var output = result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class); + var output = result.getResult(ManyAsyncStepsOutput.class); assertNotNull(output); // Sum of 0..499 * 2 = 499 * 500 / 2 * 2 = 249500 - assertEquals( - 249500, - result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class) - .result()); + assertEquals(249500, result.getResult(ManyAsyncStepsOutput.class).result()); } @Test void testManyAsyncStepsWithDefaultMultiplier() { var handler = new ManyAsyncStepsVirtualThreadPoolExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var input = new ManyAsyncStepsVirtualThreadPoolExample.Input(1, 500); + var input = new ManyAsyncStepsInput(1, 500); var result = runner.runUntilComplete(input); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); // Sum of 0..499 = 499 * 500 / 2 = 124750 - assertEquals( - 124750, - result.getResult(ManyAsyncStepsVirtualThreadPoolExample.Output.class) - .result()); + assertEquals(124750, result.getResult(ManyAsyncStepsOutput.class).result()); } @Test void testOperationsAreTracked() { var handler = new ManyAsyncStepsVirtualThreadPoolExample(); - var runner = LocalDurableTestRunner.create(ManyAsyncStepsVirtualThreadPoolExample.Input.class, handler); + var runner = LocalDurableTestRunner.create(ManyAsyncStepsInput.class, handler); - var result = runner.runUntilComplete(new ManyAsyncStepsVirtualThreadPoolExample.Input(1, 500)); + var result = runner.runUntilComplete(new ManyAsyncStepsInput(1, 500)); assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); From 5f24b938bd3ebbe77858b9c9edb3c5cafd16d01e Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:40:17 -0700 Subject: [PATCH 11/12] fix output --- .../lambda/durable/examples/CloudBasedIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java index bd2ce37f5..dfaf27f89 100644 --- a/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java +++ b/examples/src/test/java/software/amazon/lambda/durable/examples/CloudBasedIntegrationTest.java @@ -546,7 +546,7 @@ void testManyAsyncStepsExample(int steps, long maxExecutionTime, long maxReplayT assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus()); var finalResult = result.getResult(); - System.out.printf("ManyAsyncStepsVirtualThreadPoolExample result (%d steps): %s\n", steps, finalResult); + System.out.printf("ManyAsyncStepsExample result (%d steps): %s\n", steps, finalResult); assertNotNull(finalResult); assertEquals((long) steps * (steps - 1), finalResult.result()); // Sum of 0..steps * 2 From 21d85fd3a0d3015f4af8fb7eb28d417da7dbf904 Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Wed, 8 Apr 2026 15:57:03 -0700 Subject: [PATCH 12/12] update e2e tests to use proper jdk version --- .github/workflows/e2e-tests.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index e38fe4149..682eb8a28 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -57,6 +57,12 @@ jobs: role-to-assume: "${{ secrets.ACTIONS_INTEGRATION_ROLE_NAME }}" role-session-name: java-language-sdk-test aws-region: ${{ env.AWS_REGION }} + - name: Setup Java ${{ matrix.java }} + uses: actions/setup-java@v5 + with: + distribution: corretto + java-version: ${{ matrix.java }} + cache: maven - name: Build locally run: mvn -B -q -Dmaven.test.skip=true install --file pom.xml - name: sam build @@ -70,14 +76,6 @@ jobs: --resolve-image-repos --resolve-s3 --capabilities CAPABILITY_IAM --parameter-overrides \ 'ParameterKey=Architecture,ParameterValue=x86_64 ParameterKey=JavaVersion,ParameterValue=java${{ matrix.java }}' working-directory: ./examples - - name: Setup Java ${{ matrix.java }} - uses: actions/setup-java@v5 - with: - distribution: corretto - java-version: ${{ matrix.java }} - cache: maven - - name: Build locally - run: mvn -B -q -Dmaven.test.skip=true install --file pom.xml - name: Cloud Based Integration Tests run: mvn clean test -B -Dtest.cloud.enabled=true -Dtest=CloudBasedIntegrationTest -Dtest.function.name.suffix='-java${{ matrix.java }}-runtime' working-directory: ./examples