Repository navigation
[Feature]: Java Workflow Insight plugin follow-up work #679
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestparityProvides parity with other language implementations of the SDKProvides parity with other language implementations of the SDKpkg:sdkModule: sdkModule: sdk
Description
Activity
- addedparityProvides parity with other language implementations of the SDKProvides parity with other language implementations of the SDKpkg:sdkModule: sdkModule: sdk
on Sep 2, 2026 What would you like?
Track work deferred from the initial Java Workflow Insight plugin pull request,
#661.Follow-up items
- Move
ON_CHANGEexports off the checkpoint callback thread, add bounded
coalescing, and prevent a delayedRUNNINGexport from overwriting the
terminal object.
(comment) - Preserve Java runtime types when passing values to content transforms.
(comment) - Guarantee that records satisfy the configured size limit after all
truncation phases. (comment) - Distinguish an included JSON
nullvalue from an omitted or disabled field.
(comment) - Complete exporter isolation for enum values and mutable map keys.
(comment) - Coordinate sampling normalization across JavaScript, Python, and Java;
Java should continue matching JavaScript until then.
(comment) - Cloud base integration test
- Skip input snapshotting when input collection is disabled
(content.input(false)); cache explicit absence without serializing the value.
(comment) - Validate required exporter configuration, including a non-blank destination
and positive record-size limit, at build time for S3, CloudWatch Logs, and
Lambda log exporters.
(comment) - Do not add
endTimeordurationMsto non-terminalRUNNINGrecords; a
PENDINGorRETRYINGinvocation boundary is not execution completion.
(comment) - Omit
error.messagewhen an exception has no message instead of emitting
"message": null.
(comment) - Avoid forcing users of the default
LambdaLogExporterto include the S3 and
CloudWatch Logs clients; use optional dependencies or separate exporter
modules.
(comment) - Avoid re-rendering and serializing the complete record for every truncation
candidate.
(comment) - Parse durable execution ARNs by structure rather than fixed positions, and
normalize empty function, qualifier, region, account, and execution names
consistently.
(comment) - Add public accessors for workflow record input, output, error, end time,
duration, region, account, and truncation metadata so custom exporters do not
need to serialize the record to inspect it.
(comment) - Update the plugin README to state that per-invocation state is cleared at every
invocation end and rebuilt after resume.
(comment) - Move
REVIEW_FINDINGS.mdout of the Maven-published plugin module; internal
review-triage notes should remain in the PR or tracking issue.
(comment) - Preserve the Workflow Insight record when an input or output supported by a custom SDK
SerDescannot be copied by the plugin’s Jackson mapper; omit only the unsupported field instead of dropping the entire record.
(comment)
Missing exporters
Java already has Lambda logs, CloudWatch Logs, and S3. Add the remaining
exporters available in the JavaScript plugin:- CloudWatchLogsExporter
- DynamoDBExporter
- FirehoseExporter
- EventBridgeExporter
- SQSExporter
- OTelExporter
- HttpExporter
- FileExporter
- OpenSearchExporter
- RedshiftExporter
- AuroraExporter
Links
- Java plugin PR:
feat: add Workflow Insight plugin #661 - Python tracking issue:
[Feature]: Add workflow insight plugin aws-durable-execution-sdk-python#687 - JavaScript reference:
https://github.com/aws/aws-durable-execution-sdk-js/tree/main/packages/aws-durable-execution-sdk-js-insight
- Move
Draft implementation for the bounded FIFO
ON_CHANGEscheduler: #699- pending slot coalesces across executions, so one execution's final record can be dropped
Finding 1 (should fix): the pending slot coalesces across executions, so one execution's final record can be dropped ExportScheduler has one pending field. schedule() overwrites it unconditionally. The coalescing rule is "a newer record supersedes an older one because each record is a complete snapshot of the execution." That rule holds only for records of the same execution. A record for execution B does not contain execution A's information. So when records for two ARNs interleave, pending discards a record that nothing else will deliver. The end-of-invocation path makes this a data-loss bug, not a lost intermediate: 1. Execution A's onInvocationEnd calls closeAndSchedule, which puts A's SUCCEEDED record in pending. 2. A's hook thread enters drain() and waits on the in-flight pump. 3. Execution B's onOperationChange calls schedule(), which replaces pending with B's RUNNING record. 4. The pump takes pending, exports B's record, sees pending == null, and exits. 5. A's drain() returns. A's terminal record was never exported and its state is removed from byArn.Fix for the cross-execution pending-slot coalescing: #716
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestparityProvides parity with other language implementations of the SDKProvides parity with other language implementations of the SDKpkg:sdkModule: sdkModule: sdk
What would you like?
Add a Workflow Insight plugin to the AWS Lambda Durable Execution SDK for Java.
The plugin should emit a structured summary of each durable execution, including
execution status, timing, input/output, errors, and operation details. It should
follow the JavaScript Workflow Insight contract where practical while accounting
for Java-specific threading, serialization, and plugin lifecycle behavior.
Why?
Customers need an easier way to inspect and analyze durable workflows without
reconstructing execution state from raw Lambda logs and execution history.
Workflow Insight records enable:
Initial scope
insight-pluginMaven module.1.0of the Workflow Insight record.ON_COMPLETE,ON_FAILURE, andON_CHANGEemission modes.error controls.
Acceptance criteria
record contract.
and opted-in results.
operationsarray.operationsByName.have unit coverage.
@Experimental.includeErrors(false)suppresses execution and operation errors.Throwables do not disrupt durable execution.truncation, content-transform, and exporter-ordering decisions.
troubleshooting documentation.
Design constraints
RUNNINGrecords.Follow-up work
Check the comments
Links
PR #661
Issue #679
Conformance PR #73
Workflow Insight package
Is this a breaking change?
No.
Does this require an RFC?
No.