Skip to content

Commit f802fa4

Browse files
committed
Merge branch 'main' into phipag/error-handling
2 parents 433fc5a + 73e0f95 commit f802fa4

17 files changed

Lines changed: 168 additions & 114 deletions

File tree

.github/workflows/sync-package.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: Sync package
2+
3+
env:
4+
AWS_REGION: "us-west-2"
5+
6+
# permission can be added at job level or workflow level
7+
permissions:
8+
id-token: write # This is required for requesting the JWT
9+
contents: read # This is required for actions/checkout
10+
11+
on:
12+
workflow_call:
13+
inputs:
14+
module_name:
15+
required: true
16+
type: string
17+
package_name:
18+
required: true
19+
type: string
20+
secrets:
21+
S3_BUCKET_NAME:
22+
required: true
23+
SYNC_LAMBDA_ARN:
24+
required: true
25+
GITFARM_LAN_SDK_REPO:
26+
required: true
27+
GITFARM_LAN_SDK_BRANCH:
28+
required: true
29+
ACTIONS_SYNC_ROLE_NAME:
30+
required: true
31+
jobs:
32+
upload-to-S3-and-sync-to-Gitfarm:
33+
runs-on: ubuntu-latest
34+
steps:
35+
- name: Git clone the repository
36+
uses: actions/checkout@v5
37+
- name: Set up JDK 17
38+
uses: actions/setup-java@v4
39+
with:
40+
java-version: '17'
41+
distribution: 'temurin'
42+
cache: maven
43+
- name: Get version
44+
id: get_version
45+
run: |
46+
VERSION=$( mvn -f ${{ inputs.module_name }}/pom.xml help:evaluate -Dexpression=project.version -q -DforceStdout )
47+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
48+
- name: Show extracted Maven project version
49+
run: echo ${{ steps.get_version.outputs.version }}
50+
- name: Build with Maven
51+
run: mvn -B package --file pom.xml
52+
- name: configure aws credentials
53+
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502
54+
with:
55+
role-to-assume: "${{ secrets.ACTIONS_SYNC_ROLE_NAME }}"
56+
role-session-name: samplerolesession
57+
aws-region: ${{ env.AWS_REGION }}
58+
# Upload a file to AWS s3
59+
- name: Copy tgz build file to s3
60+
run: |
61+
aws s3 cp ./${{ inputs.module_name }}/target/${{ inputs.package_name }}-${{ steps.get_version.outputs.version }}.jar \
62+
s3://${{ secrets.S3_BUCKET_NAME }}/${{ inputs.package_name }}.jar
63+
- name: commit to Gitfarm
64+
run: |
65+
aws lambda invoke \
66+
--function-name ${{ secrets.SYNC_LAMBDA_ARN }} \
67+
--payload '{"gitFarmRepo":"${{ secrets.GITFARM_LAN_SDK_REPO }}","gitFarmBranch":"${{ secrets.GITFARM_LAN_SDK_BRANCH }}","gitFarmFilepath":"${{ secrets.GITFARM_LAN_SDK_REPO }}-1.0.jar","s3Bucket":"${{ secrets.S3_BUCKET_NAME }}","s3FilePath":"${{ inputs.package_name }}.jar", "gitHubRepo": "aws-durable-execution-sdk-java", "gitHubCommit":"${{ github.sha }}"}' \
68+
--cli-binary-format raw-in-base64-out \
69+
output.txt
70+
- name: Check for specific text in a file
71+
id: check_text
72+
run: |
73+
if grep -q "Error" output.txt; then
74+
cat output.txt
75+
exit 1
76+
fi

.github/workflows/sync-sdk.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Sync SDK
2+
on:
3+
push:
4+
branches: ["main"]
5+
paths:
6+
- "sdk/**"
7+
8+
env:
9+
AWS_REGION: "us-west-2"
10+
11+
# permission can be added at job level or workflow level
12+
permissions:
13+
id-token: write # This is required for requesting the JWT
14+
contents: read # This is required for actions/checkout
15+
16+
jobs:
17+
sync-aws-durable-execution-sdk-java:
18+
uses: ./.github/workflows/sync-package.yml
19+
with:
20+
module_name: sdk
21+
package_name: aws-durable-execution-sdk-java
22+
secrets:
23+
S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }}
24+
SYNC_LAMBDA_ARN: ${{ secrets.SYNC_LAMBDA_ARN }}
25+
GITFARM_LAN_SDK_REPO: ${{ secrets.GITFARM_LAN_SDK_REPO }}
26+
GITFARM_LAN_SDK_BRANCH: ${{ secrets.GITFARM_LAN_SDK_BRANCH }}
27+
ACTIONS_SYNC_ROLE_NAME: ${{ secrets.ACTIONS_SYNC_ROLE_NAME }}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Sync Testing SDK
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
paths:
7+
- "sdk-testing/**"
8+
9+
env:
10+
AWS_REGION: "us-west-2"
11+
12+
# permission can be added at job level or workflow level
13+
permissions:
14+
id-token: write # This is required for requesting the JWT
15+
contents: read # This is required for actions/checkout
16+
17+
jobs:
18+
sync-aws-durable-execution-sdk-java-testing:
19+
uses: ./.github/workflows/sync-package.yml
20+
with:
21+
module_name: sdk-testing
22+
package_name: aws-durable-execution-sdk-java-testing
23+
secrets:
24+
S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }}
25+
SYNC_LAMBDA_ARN: ${{ secrets.SYNC_LAMBDA_ARN }}
26+
GITFARM_LAN_SDK_REPO: ${{ secrets.GITFARM_TESTING_SDK_REPO }}
27+
GITFARM_LAN_SDK_BRANCH: ${{ secrets.GITFARM_LAN_SDK_BRANCH }}
28+
ACTIONS_SYNC_ROLE_NAME: ${{ secrets.ACTIONS_SYNC_ROLE_NAME }}

examples/src/main/java/com/amazonaws/lambda/durable/examples/CustomConfigExample.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,6 @@ public String serialize(Object obj) {
123123
}
124124
}
125125

126-
@Override
127-
public <T> T deserialize(String json, Class<T> clazz) {
128-
try {
129-
return objectMapper.readValue(json, clazz);
130-
} catch (IOException e) {
131-
throw new RuntimeException("Deserialization failed", e);
132-
}
133-
}
134-
135126
@Override
136127
public <T> T deserialize(String json, TypeToken<T> typeToken) {
137128
try {

sdk-integration-tests/src/test/java/com/amazonaws/lambda/durable/CustomConfigIntegrationTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,6 @@ public String serialize(Object value) {
3434
return delegate.serialize(value);
3535
}
3636

37-
@Override
38-
public <T> T deserialize(String data, Class<T> type) {
39-
deserializeCount.incrementAndGet();
40-
return delegate.deserialize(data, type);
41-
}
42-
4337
@Override
4438
public <T> T deserialize(String data, TypeToken<T> typeToken) {
4539
deserializeCount.incrementAndGet();

sdk-integration-tests/src/test/java/com/amazonaws/lambda/durable/CustomSerDesIntegrationTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ public String serialize(Object value) {
2626
return delegate.serialize(value);
2727
}
2828

29-
@Override
30-
public <T> T deserialize(String data, Class<T> type) {
31-
deserializeCount.incrementAndGet();
32-
return delegate.deserialize(data, type);
33-
}
34-
3529
@Override
3630
public <T> T deserialize(String data, TypeToken<T> typeToken) {
3731
deserializeCount.incrementAndGet();

sdk-testing/src/main/java/com/amazonaws/lambda/durable/testing/TestOperation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.amazonaws.lambda.durable.testing;
44

5+
import com.amazonaws.lambda.durable.TypeToken;
56
import com.amazonaws.lambda.durable.serde.SerDes;
67
import java.util.List;
78
import software.amazon.awssdk.services.lambda.model.ErrorObject;
@@ -58,7 +59,7 @@ public <T> T getStepResult(Class<T> type) {
5859
if (details == null || details.result() == null) {
5960
return null;
6061
}
61-
return serDes.deserialize(details.result(), type);
62+
return serDes.deserialize(details.result(), TypeToken.get(type));
6263
}
6364

6465
public ErrorObject getError() {

sdk-testing/src/main/java/com/amazonaws/lambda/durable/testing/TestResult.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
package com.amazonaws.lambda.durable.testing;
44

5+
import com.amazonaws.lambda.durable.TypeToken;
56
import com.amazonaws.lambda.durable.model.ExecutionStatus;
67
import com.amazonaws.lambda.durable.serde.SerDes;
78
import java.util.List;
@@ -49,7 +50,7 @@ public <T> T getResult(Class<T> resultType) {
4950
if (resultPayload == null) {
5051
return null;
5152
}
52-
return serDes.deserialize(resultPayload, resultType);
53+
return serDes.deserialize(resultPayload, TypeToken.get(resultType));
5354
}
5455

5556
public Optional<ErrorObject> getError() {

sdk/src/main/java/com/amazonaws/lambda/durable/DurableContext.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class DurableContext {
5656
public <T> T step(String name, Class<T> resultType, Supplier<T> func) {
5757
return step(
5858
name,
59-
resultType,
59+
TypeToken.get(resultType),
6060
func,
6161
StepConfig.builder()
6262
.retryStrategy(RetryStrategies.Presets.NO_RETRY)
@@ -86,29 +86,15 @@ public <T> T step(String name, TypeToken<T> typeToken, Supplier<T> func, StepCon
8686
public <T> DurableFuture<T> stepAsync(String name, Class<T> resultType, Supplier<T> func) {
8787
return stepAsync(
8888
name,
89-
resultType,
89+
TypeToken.get(resultType),
9090
func,
9191
StepConfig.builder()
9292
.retryStrategy(RetryStrategies.Presets.NO_RETRY)
9393
.build());
9494
}
9595

9696
public <T> DurableFuture<T> stepAsync(String name, Class<T> resultType, Supplier<T> func, StepConfig config) {
97-
var operationId = nextOperationId();
98-
99-
// Validate replay consistency
100-
var existing = executionManager.getOperation(operationId);
101-
if (existing != null) {
102-
validateReplay(operationId, OperationType.STEP, name, existing);
103-
}
104-
105-
// Create and start step operation
106-
StepOperation<T> operation =
107-
new StepOperation<>(operationId, name, func, resultType, config, executionManager, logger, serDes);
108-
109-
operation.execute(); // Start the step (returns immediately)
110-
111-
return new DurableFuture<>(operation);
97+
return stepAsync(name, TypeToken.get(resultType), func, config);
11298
}
11399

114100
public <T> DurableFuture<T> stepAsync(String name, TypeToken<T> typeToken, Supplier<T> func) {

sdk/src/main/java/com/amazonaws/lambda/durable/DurableExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private static <I> I extractUserInput(Operation executionOp, SerDes serDes, Clas
156156
}
157157

158158
var inputPayload = executionOp.executionDetails().inputPayload();
159-
return serDes.deserialize(inputPayload, inputType);
159+
return serDes.deserialize(inputPayload, TypeToken.get(inputType));
160160
}
161161

162162
public static <I, O> RequestHandler<DurableExecutionInput, DurableExecutionOutput> wrap(

0 commit comments

Comments
 (0)