Skip to content

[testing]: make local runner checkpoint API return only updated operations#321

Merged
zhongkechen merged 4 commits intomainfrom
fixLocalRunner
Apr 9, 2026
Merged

[testing]: make local runner checkpoint API return only updated operations#321
zhongkechen merged 4 commits intomainfrom
fixLocalRunner

Conversation

@zhongkechen
Copy link
Copy Markdown
Contributor

@zhongkechen zhongkechen commented Apr 7, 2026

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Issue Link, if available

Fixes: #81

Related: #313

Description

  • Updated checkpoint API in local runner to return only updated operations
  • Moved events storage to EventProcessor
  • Removed unused getExecutionState API from local runner
  • Updated ParallelIntegrationTest.java to not show warnings in IDE
  • Moved specific operation related logic from LocalMemoryExecutionClient to OperationProcessor

Demo/Screenshots

Before

{"@timestamp":"2026-04-07T22:58:36.015Z","ecs.version":"1.2.0","log.level":"DEBUG","message":"Durable checkpoint API called (latency=17750ns): CheckpointDurableExecutionResponse(CheckpointToken=e9b7cddd-f388-43f4-8787-43adef5dd7c0, NewExecutionState=CheckpointUpdatedExecutionState(Operations=[
Operation(Id=815e884f603b6a7830b83bdf214d1916313f47abbcbeb0cc362861d97baa32ea, ParentId=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce, Name=regional-adjustment, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***)), 
Operation(Id=77eab15df378ef23fe74769ba8dcae8e78f14e3f11d318f3c88400c88601ed47, ParentId=815e884f603b6a7830b83bdf214d1916313f47abbcbeb0cc362861d97baa32ea, Name=lookup-region, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=75fa9902e12defcc35af96d78bb44dd2e18fc1b6048543397ed29dc48b525c34, ParentId=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35, Name=confirmation-delay, Type=WAIT, Status=SUCCEEDED, WaitDetails=WaitDetails(ScheduledEndTimestamp=2026-04-07T22:58:39.011204Z)),
 Operation(Id=216922f7fb504d2177c32e4f234f8ee8a17acce62cbf43e8db61d4a04b2b9ac2, ParentId=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce, Name=calculate-base-rate, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=6e6c5ead72e4def46285135ab059ed928a387c4da0c8215d26575a1e2e0b0ca6, ParentId=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35, Name=confirm-inventory, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=a2b1919528d81d47916e0dba0364ae756582a2e7a2cb08ff212b62bebaa93c0c, ParentId=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b, Name=validate-order, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=02639542652da51af1ee1b734ee5663c43baae11fdef37a46a5c463c9dccbbe0, ParentId=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b, Name=validation-delay, Type=WAIT, Status=SUCCEEDED, WaitDetails=WaitDetails(ScheduledEndTimestamp=2026-04-07T22:58:41.011568Z)),
 Operation(Id=1df9abb5d4ea62110422aa3a00e504bf4b8a17157750fa43451c26dda199706e, ParentId=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35, Name=check-stock, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce, Name=shipping-estimate, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35, Name=inventory-check, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=2ac06c59dbc2f95f867ebb0f4e986076465c3dfd08e9353610dcf46b8b030df6, ParentId=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b, Name=prepare-order, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=a284279648aefdf597596b232660aa27c02f01d3fcdfc0ddf1fbd4a3400e2603, ParentId=4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce, Name=finalize-shipping, Type=STEP, Status=SUCCEEDED, StepDetails=StepDetails(Result=*** Sensitive Data Redacted ***)),
 Operation(Id=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b, Name=order-validation, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***))])).","process.thread.name":"durable-sdk-internal-0","log.logger":"software.amazon.lambda.durable.execution.CheckpointManager"}

after

{"@timestamp":"2026-04-07T23:01:14.708Z","ecs.version":"1.2.0","log.level":"DEBUG","message":"Durable checkpoint API called (latency=20125ns): CheckpointDurableExecutionResponse(CheckpointToken=15deaf62-69af-42ae-ae21-c8fecd1c06ea, NewExecutionState=CheckpointUpdatedExecutionState(Operations=[
Operation(Id=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35, Name=inventory-check, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***)), 
Operation(Id=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b, Name=order-validation, Type=CONTEXT, SubType=RunInChildContext, Status=SUCCEEDED, ContextDetails=ContextDetails(Result=*** Sensitive Data Redacted ***))])).","process.thread.name":"durable-sdk-internal-0","log.logger":"software.amazon.lambda.durable.execution.CheckpointManager"}

Checklist

  • I have filled out every section of the PR template
  • I have thoroughly tested this change

Testing

Unit Tests

Have unit tests been written for these changes? N/A

Integration Tests

Have integration tests been written for these changes? N/A

Examples

Has a new example been added for the change? (if applicable) N/A

@zhongkechen zhongkechen marked this pull request as ready for review April 7, 2026 23:04
@zhongkechen zhongkechen requested a review from a team April 7, 2026 23:04
@zhongkechen zhongkechen self-assigned this Apr 7, 2026
var runner = LocalDurableTestRunner.create(String.class, (input, context) -> {
var config = ParallelConfig.builder().build();
var futures = new ArrayList<DurableFuture<String>>();
var parallel = context.parallel("partial-fail", config);
Copy link
Copy Markdown
Contributor

@SilanHe SilanHe Apr 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just curious, any reason why we decided to use var for most of the code base?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just because the SDK supports only Java 17+?

@zhongkechen zhongkechen requested a review from SilanHe April 8, 2026 17:13
@zhongkechen zhongkechen marked this pull request as draft April 8, 2026 17:30
@zhongkechen zhongkechen marked this pull request as ready for review April 8, 2026 20:33
@zhongkechen zhongkechen merged commit 4bbf964 into main Apr 9, 2026
12 of 17 checks passed
@zhongkechen zhongkechen deleted the fixLocalRunner branch April 9, 2026 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: LocalMemoryExecutionClient returns operations that have already checkpointed.

3 participants