diff --git a/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationEndInfo.java b/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationEndInfo.java index 145f48e65..eb11371da 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationEndInfo.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationEndInfo.java @@ -4,7 +4,6 @@ import java.time.Instant; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * Information provided at the end of a Lambda invocation. @@ -18,9 +17,9 @@ * @param executionStartTime the stable start timestamp of the durable execution * @param operations a snapshot of operations known when the invocation ended, keyed by operation ID * @param invocationStatus the invocation outcome - * @param executionError non-null if the execution failed; this component is experimental - * @param executionInput the deserialized execution input; this component is experimental - * @param executionResult the value returned by a successful handler; this component is experimental + * @param executionError non-null if the execution failed + * @param executionInput the deserialized execution input + * @param executionResult the value returned by a successful handler */ public record InvocationEndInfo( String requestId, @@ -29,9 +28,9 @@ public record InvocationEndInfo( Instant executionStartTime, Map operations, InvocationStatus invocationStatus, - @Experimental Throwable executionError, - @Experimental Object executionInput, - @Experimental Object executionResult) { + Throwable executionError, + Object executionInput, + Object executionResult) { /** Creates invocation-end information without execution payloads or operation state. */ public InvocationEndInfo( diff --git a/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationInfo.java b/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationInfo.java index c72e95109..5967ad622 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationInfo.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/plugin/InvocationInfo.java @@ -6,7 +6,6 @@ import java.time.Instant; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * Invocation-level information available to plugin hooks. @@ -20,10 +19,8 @@ * @param executionStartTime the start timestamp of the durable execution, taken from the initial EXECUTION operation in * the first event delivered by the backend. Never null and stable across all invocations of the same execution. * @param executionInput the deserialized execution input passed to the user handler, or null when unavailable - * @param operations checkpointed operations delivered at invocation start, keyed by operation ID; this component is - * experimental - * @param updatedOperations operations changed externally since the previous invocation, keyed by operation ID; this - * component is experimental + * @param operations checkpointed operations delivered at invocation start, keyed by operation ID + * @param updatedOperations operations changed externally since the previous invocation, keyed by operation ID * @param xRayTraceId immutable invocation-local X-Ray header; null means unavailable and permits legacy carrier * fallback, while an empty string means an available runtime supplied no header */ @@ -32,9 +29,9 @@ public record InvocationInfo( String durableExecutionArn, boolean isFirstInvocation, Instant executionStartTime, - @Experimental Object executionInput, - @Experimental Map operations, - @Experimental Map updatedOperations, + Object executionInput, + Map operations, + Map updatedOperations, String xRayTraceId) { public InvocationInfo { diff --git a/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationChangeItemInfo.java b/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationChangeItemInfo.java index 2d5a0f9c5..18c80e32d 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationChangeItemInfo.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationChangeItemInfo.java @@ -4,7 +4,6 @@ import java.time.Instant; import software.amazon.awssdk.services.lambda.model.OperationStatus; -import software.amazon.lambda.durable.annotations.Experimental; /** * Operation-level information for an {@link OperationChangeInfo} and invocation operation snapshot. @@ -19,8 +18,8 @@ * @param status operation status * @param attempt attempt number for retriable operations, null for others * @param isReplay true if this operation was present in state delivered at invocation start - * @param error non-null if the operation failed; this component is experimental - * @param result checkpointed serialized result, or null if unavailable; this component is experimental + * @param error non-null if the operation failed + * @param result checkpointed serialized result, or null if unavailable */ public record OperationChangeItemInfo( String id, @@ -33,8 +32,8 @@ public record OperationChangeItemInfo( OperationStatus status, Integer attempt, boolean isReplay, - @Experimental Throwable error, - @Experimental String result) { + Throwable error, + String result) { /** Returns a representation that omits the operation result payload. */ @Override diff --git a/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationEndInfo.java b/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationEndInfo.java index b61df330e..89e7c32dc 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationEndInfo.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/plugin/OperationEndInfo.java @@ -3,7 +3,6 @@ package software.amazon.lambda.durable.plugin; import java.time.Instant; -import software.amazon.lambda.durable.annotations.Experimental; /** * Extended operation information for operation end events. @@ -18,9 +17,8 @@ * @param status the operation's terminal status (e.g., SUCCEEDED, FAILED, TIMED_OUT) — may be null for virtual ops * @param attempt the total number of attempts for retriable operations (STEP, WAIT_FOR_CONDITION) — null for others * @param isReplay true if this operation already existed in the execution state (completed in a prior invocation) - * @param error non-null if the operation failed; this component is experimental - * @param result the serialized result of the operation, or null if the operation failed or has no result; this - * component is experimental + * @param error non-null if the operation failed + * @param result the serialized result of the operation, or null if the operation failed or has no result */ public record OperationEndInfo( String id, @@ -33,8 +31,8 @@ public record OperationEndInfo( String status, Integer attempt, boolean isReplay, - @Experimental Throwable error, - @Experimental String result) { + Throwable error, + String result) { /** * Creates operation-end information without a result. diff --git a/sdk/src/main/java/software/amazon/lambda/durable/plugin/UserFunctionEndInfo.java b/sdk/src/main/java/software/amazon/lambda/durable/plugin/UserFunctionEndInfo.java index 7eee99545..66e2a08fc 100644 --- a/sdk/src/main/java/software/amazon/lambda/durable/plugin/UserFunctionEndInfo.java +++ b/sdk/src/main/java/software/amazon/lambda/durable/plugin/UserFunctionEndInfo.java @@ -3,7 +3,6 @@ package software.amazon.lambda.durable.plugin; import java.time.Instant; -import software.amazon.lambda.durable.annotations.Experimental; /** * Information provided when a user function finishes executing. @@ -20,7 +19,7 @@ * @param isReplay true if this operation was present in the checkpointed state delivered at invocation start * @param attempt 1-based attempt number for steps/waitForCondition, null for context operations * @param outcome the user function outcome - * @param error non-null if the user function failed or exited incompletely; this component is experimental + * @param error non-null if the user function failed or exited incompletely */ public record UserFunctionEndInfo( String id, @@ -33,4 +32,4 @@ public record UserFunctionEndInfo( boolean isReplay, Integer attempt, UserFunctionOutcome outcome, - @Experimental Throwable error) {} + Throwable error) {} diff --git a/telemetry-exporter/README.md b/telemetry-exporter/README.md index 17b661904..8f162f522 100644 --- a/telemetry-exporter/README.md +++ b/telemetry-exporter/README.md @@ -1,14 +1,10 @@ -# Durable Execution Telemetry Exporter (preview) +# Durable Execution Telemetry Exporter Instrumentation plugin for the AWS Lambda Durable Execution Java SDK that emits a curated, per-execution **Durable Execution Telemetry record** to one or more pluggable exporters. It ports the JavaScript `durableExecutionTelemetry()` contract (canonical record schema `1.0`) to the Java plugin hook surface. -> **Preview API.** Every public type is annotated -> `@software.amazon.lambda.durable.annotations.Experimental` to signal it is experimental and may -> change or be removed in a future release without a major-version bump. - ## Usage ```java diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ArnParser.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ArnParser.java index 3eafe1ee5..e2f2c2e60 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ArnParser.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ArnParser.java @@ -2,15 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 package software.amazon.lambda.durable.telemetry; -import software.amazon.lambda.durable.annotations.Experimental; - /** * Parses the durable execution ARN into its component fields, mirroring the JS {@code parseExecutionArn}. * *

Format: * {@code arn::lambda:::function::/durable-execution//}. */ -@Experimental public final class ArnParser { private final String functionName; private final String qualifier; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ContentConfig.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ContentConfig.java index ae3e3f9af..4d15e1fc8 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ContentConfig.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ContentConfig.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; -import software.amazon.lambda.durable.annotations.Experimental; /** * Controls what data is included in emitted records (input/output transforms, operation overrides, error inclusion). @@ -24,7 +23,6 @@ * the cached input snapshot or any later emission — and a non-fatal transform failure omits the field and is logged. * VM/thread-termination errors propagate. */ -@Experimental public final class ContentConfig { private final boolean includeInput; private final Function inputTransform; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetry.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetry.java index ff5b0f2f0..591b69e7b 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetry.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetry.java @@ -7,7 +7,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.lambda.model.ErrorObject; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.exception.DurableOperationException; import software.amazon.lambda.durable.exception.UnrecoverableDurableExecutionException; import software.amazon.lambda.durable.plugin.DurableExecutionPluginFactory; @@ -42,7 +41,6 @@ * {@link TelemetrySettings}, the exporters, and the {@link ExportScheduler} that serializes exports across every * execution the environment hosts. */ -@Experimental public final class DurableExecutionTelemetry { private static final Logger logger = LoggerFactory.getLogger(DurableExecutionTelemetry.class); diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryConfig.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryConfig.java index b9d2fc193..b146644bb 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryConfig.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryConfig.java @@ -4,14 +4,11 @@ import java.util.ArrayList; import java.util.List; -import software.amazon.lambda.durable.annotations.Experimental; /** Configuration for the Durable Execution Telemetry plugin. Mirrors the JS {@code DurableExecutionTelemetryConfig}. */ -@Experimental public final class DurableExecutionTelemetryConfig { /** When records are emitted. */ - @Experimental public enum EmitMode { ON_COMPLETE, ON_CHANGE, @@ -19,7 +16,6 @@ public enum EmitMode { } /** Which operations to include in each record's operations array. */ - @Experimental public enum OperationDetail { TOP_LEVEL, FULL_TREE diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryRecord.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryRecord.java index 4fb67a6dd..97468f825 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryRecord.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/DurableExecutionTelemetryRecord.java @@ -7,7 +7,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * The curated execution record emitted to destinations. @@ -16,7 +15,6 @@ * identical (camelCase names, absent fields omitted). Exactly one of {@code operations} (array) or the * {@code operationsByName} rendering is emitted, depending on the exporter's {@code render}. */ -@Experimental public final class DurableExecutionTelemetryRecord { String recordType = "DurableExecutionTelemetry"; String schemaVersion = "1.0"; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ErrorInfo.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ErrorInfo.java index b5c323f4c..08889819f 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ErrorInfo.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/ErrorInfo.java @@ -4,10 +4,8 @@ import java.util.LinkedHashMap; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** Error detail carried on a record or operation, mirroring the JS {@code {name, message}} shape. */ -@Experimental public final class ErrorInfo { private final String name; private final String message; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Json.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Json.java index ef8ec9619..3459391a0 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Json.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Json.java @@ -14,11 +14,9 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.internal.FatalErrors; /** Minimal JSON helper for emitting telemetry records and measuring their serialized size. */ -@Experimental public final class Json { // Register JavaTimeModule and emit ISO-8601 (not numeric timestamps) so SDK-default payload types such as // java.time.Instant/Duration in an included input/output/result serialize instead of throwing and silently diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationOverride.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationOverride.java index f42be02b9..3d19a6bce 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationOverride.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationOverride.java @@ -3,7 +3,6 @@ package software.amazon.lambda.durable.telemetry; import java.util.function.Function; -import software.amazon.lambda.durable.annotations.Experimental; /** * Per-operation override controlling inclusion and result transformation, matched by {@code operationName}. @@ -15,7 +14,6 @@ * argument is safe, and a transform that throws omits the field (the failure is logged) rather than leaking the raw * value or failing the execution. An {@code exclude} override drops the operation entirely. */ -@Experimental public final class OperationOverride { private final String operationName; private final boolean exclude; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationRecord.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationRecord.java index efde64308..aea2bdb06 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationRecord.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationRecord.java @@ -4,7 +4,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * A single operation within an execution (step, wait, invoke, callback, or context). @@ -12,7 +11,6 @@ *

Mirrors the JS {@code OperationRecord} interface field-for-field so the emitted wire JSON is identical. A * {@code null} field is treated as absent and omitted from the wire map (distinct from an explicit JSON null). */ -@Experimental public final class OperationRecord { private String id; private String name; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationSummary.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationSummary.java index 130c043a1..b29c84372 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationSummary.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationSummary.java @@ -4,7 +4,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * A per-operation-name summary emitted (as an {@code operationsByName} map) by point-access exporters (CloudWatch @@ -14,7 +13,6 @@ * {@code type}, {@code subType}, {@code status} reflect the most recently seen occurrence; {@code result}/{@code error} * are included only when the name occurs exactly once. */ -@Experimental public final class OperationSummary { String type; String subType; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationsIndex.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationsIndex.java index 98398e36a..82b057d25 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationsIndex.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/OperationsIndex.java @@ -5,7 +5,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; /** * Builds a name-keyed index of operation summaries from the canonical operations array. @@ -15,7 +14,6 @@ * {@code error} (no single representative value). Scalar fields ({@code type}, {@code subType}, {@code status}) reflect * the most recently seen occurrence. Unnamed operations are skipped. */ -@Experimental public final class OperationsIndex { private OperationsIndex() {} diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/TelemetryExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/TelemetryExporter.java index 0e48b5224..92d6b399b 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/TelemetryExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/TelemetryExporter.java @@ -2,10 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package software.amazon.lambda.durable.telemetry; -import software.amazon.lambda.durable.annotations.Experimental; - /** Exports workflow telemetry records to a destination. */ -@Experimental public interface TelemetryExporter { /** Emits one record to the destination. */ diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Truncation.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Truncation.java index 52bb44651..bca6285ae 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Truncation.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/Truncation.java @@ -6,7 +6,6 @@ import java.util.Comparator; import java.util.List; import java.util.function.Function; -import software.amazon.lambda.durable.annotations.Experimental; /** * Best-effort size limiter, porting the JS {@code truncateRecord} drop order: @@ -23,7 +22,6 @@ * record is never mutated. {@code render} maps the record to the exact shape the exporter serializes so the size check * measures what is actually emitted. */ -@Experimental public final class Truncation { private Truncation() {} diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/AuroraExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/AuroraExporter.java index ae78d75bb..78dd37210 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/AuroraExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/AuroraExporter.java @@ -10,7 +10,6 @@ import software.amazon.awssdk.services.rdsdata.model.ExecuteStatementRequest; import software.amazon.awssdk.services.rdsdata.model.Field; import software.amazon.awssdk.services.rdsdata.model.SqlParameter; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -20,11 +19,9 @@ * per execution keyed by execution ARN. Requires the Data API enabled on the cluster, {@code rds-data:ExecuteStatement} * and {@code secretsmanager:GetSecretValue}. */ -@Experimental public final class AuroraExporter implements TelemetryExporter { /** Database engine; selects the upsert dialect. */ - @Experimental public enum Engine { POSTGRESQL("postgresql"), MYSQL("mysql"); diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/CloudWatchLogsExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/CloudWatchLogsExporter.java index 0119f677d..85cd3ee0b 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/CloudWatchLogsExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/CloudWatchLogsExporter.java @@ -11,7 +11,6 @@ import software.amazon.awssdk.services.cloudwatchlogs.model.CreateLogStreamRequest; import software.amazon.awssdk.services.cloudwatchlogs.model.InputLogEvent; import software.amazon.awssdk.services.cloudwatchlogs.model.PutLogEventsRequest; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -21,7 +20,6 @@ * {@code operationsByName} map. Mirrors the JS {@code CloudWatchLogsExporter}. Requires {@code logs:CreateLogStream} * and {@code logs:PutLogEvents} on the target log group. */ -@Experimental public final class CloudWatchLogsExporter implements TelemetryExporter { private final String logGroupName; private final String logStreamPrefix; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/DynamoDBExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/DynamoDBExporter.java index a1f5a970b..949b57b2d 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/DynamoDBExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/DynamoDBExporter.java @@ -11,7 +11,6 @@ import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -21,7 +20,6 @@ * default sort key ({@code emittedAt}) every export adds a history item; with the sort key disabled each export * overwrites the execution's item. Emits the {@code operationsByName} map. Requires {@code dynamodb:PutItem}. */ -@Experimental public final class DynamoDBExporter implements TelemetryExporter { private final String tableName; private final String partitionKey; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/EventBridgeExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/EventBridgeExporter.java index 452d016ea..5d94e020c 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/EventBridgeExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/EventBridgeExporter.java @@ -9,7 +9,6 @@ import software.amazon.awssdk.services.eventbridge.model.PutEventsRequestEntry; import software.amazon.awssdk.services.eventbridge.model.PutEventsResponse; import software.amazon.awssdk.services.eventbridge.model.PutEventsResultEntry; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -18,7 +17,6 @@ * Exports workflow telemetry records to Amazon EventBridge, one PutEvents entry per record with the record status as * {@code DetailType} and the record JSON as {@code Detail}. Requires {@code events:PutEvents}. */ -@Experimental public final class EventBridgeExporter implements TelemetryExporter { /** * Default event source. The {@code aws.} prefix is reserved for AWS service events and is rejected by PutEvents. diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FileExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FileExporter.java index 81901227a..6b9caced3 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FileExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FileExporter.java @@ -11,7 +11,6 @@ import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -21,11 +20,9 @@ * (default), or written as one pretty-printed JSON file per execution that later exports overwrite. Suitable for an EFS * mount or {@code /tmp}. No truncation limit by default. */ -@Experimental public final class FileExporter implements TelemetryExporter { /** File layout. */ - @Experimental public enum Mode { /** Append every record to {@code {directory}/{YYYY-MM-DD}.ndjson}. */ NDJSON("ndjson"), diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FirehoseExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FirehoseExporter.java index 16f90f5f7..9b95f313f 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FirehoseExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/FirehoseExporter.java @@ -8,7 +8,6 @@ import software.amazon.awssdk.services.firehose.FirehoseClient; import software.amazon.awssdk.services.firehose.model.PutRecordRequest; import software.amazon.awssdk.services.firehose.model.Record; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -17,7 +16,6 @@ * Exports workflow telemetry records to Amazon Data Firehose, one PutRecord per record as a newline-terminated JSON * line so concatenated deliveries stay parseable as NDJSON. Requires {@code firehose:PutRecord}. */ -@Experimental public final class FirehoseExporter implements TelemetryExporter { private final String deliveryStreamName; private final OperationsFormat operationsFormat; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/HttpExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/HttpExporter.java index 6723f46df..5001a7d5c 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/HttpExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/HttpExporter.java @@ -12,7 +12,6 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -21,11 +20,9 @@ * Exports workflow telemetry records to an HTTP endpoint as a JSON body, one request per record. A non-2xx response * fails the export. No truncation limit by default; set one if the endpoint caps request size. */ -@Experimental public final class HttpExporter implements TelemetryExporter { /** Request method. */ - @Experimental public enum Method { POST, PUT; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/LambdaLogExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/LambdaLogExporter.java index b44e84a8e..bf92ff627 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/LambdaLogExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/LambdaLogExporter.java @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 package software.amazon.lambda.durable.telemetry.exporters; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -13,7 +12,6 @@ * record, mirroring the JS {@code LambdaLogExporter} (which uses {@code console.log}). The conformance CloudWatch sink * decodes both raw top-level JSON lines and the Lambda structured-logging envelope. */ -@Experimental public final class LambdaLogExporter implements TelemetryExporter { /** CloudWatch Logs caps a single log event at 256 KB. */ private final Integer maxRecordSizeBytes; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OTelExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OTelExporter.java index f8468a394..fdbe6aeaf 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OTelExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OTelExporter.java @@ -14,7 +14,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -24,11 +23,9 @@ * record with identity fields as resource and log attributes and the full record JSON as the body. Compatible with any * OTLP-capable backend; authentication is via headers. */ -@Experimental public final class OTelExporter implements TelemetryExporter { /** OTLP transport encoding. */ - @Experimental public enum Protocol { HTTP_JSON("http/json"), HTTP_PROTOBUF("http/protobuf"); diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OpenSearchExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OpenSearchExporter.java index 69e9771dc..2c78e29ea 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OpenSearchExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OpenSearchExporter.java @@ -22,7 +22,6 @@ import software.amazon.awssdk.http.SdkHttpRequest; import software.amazon.awssdk.http.auth.aws.signer.AwsV4HttpSigner; import software.amazon.awssdk.http.auth.spi.signer.SignedRequest; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -32,11 +31,9 @@ * document id so later exports overwrite the same document. Authenticates with SigV4 (default) or HTTP basic auth. * Requires {@code es:ESHttpPut} on the index for SigV4. */ -@Experimental public final class OpenSearchExporter implements TelemetryExporter { /** Authentication method. */ - @Experimental public enum Auth { /** IAM request signing for Amazon OpenSearch Service (default). */ SIGV4("sigv4"), diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OperationsFormat.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OperationsFormat.java index e75ed8f31..95bfa24f8 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OperationsFormat.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/OperationsFormat.java @@ -3,11 +3,9 @@ package software.amazon.lambda.durable.telemetry.exporters; import java.util.Map; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; /** How an exporter renders operations in the emitted record. */ -@Experimental public enum OperationsFormat { /** The canonical {@code operations} array (lossless; default). */ ARRAY("array"), diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/RedshiftExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/RedshiftExporter.java index 99a8b6f1b..89f7086f9 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/RedshiftExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/RedshiftExporter.java @@ -10,7 +10,6 @@ import software.amazon.awssdk.services.redshiftdata.RedshiftDataClient; import software.amazon.awssdk.services.redshiftdata.model.ExecuteStatementRequest; import software.amazon.awssdk.services.redshiftdata.model.SqlParameter; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -22,7 +21,6 @@ * ({@code redshift-serverless:GetCredentials}, {@code redshift:GetClusterCredentialsWithIAM}, or * {@code secretsmanager:GetSecretValue}). */ -@Experimental public final class RedshiftExporter implements TelemetryExporter { private final String database; private final String fqTable; diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/S3Exporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/S3Exporter.java index 3db659e6f..c5d466e61 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/S3Exporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/S3Exporter.java @@ -5,7 +5,6 @@ import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutObjectRequest; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -15,11 +14,9 @@ * overwrite the same object). Emits the canonical {@code operations}-array wire shape. Mirrors the JS * {@code S3Exporter}. */ -@Experimental public final class S3Exporter implements TelemetryExporter { /** How to partition objects in S3. */ - @Experimental public enum Partitioning { DATE, FUNCTION_NAME, diff --git a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/SQSExporter.java b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/SQSExporter.java index 4e727d9d4..eaff167ff 100644 --- a/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/SQSExporter.java +++ b/telemetry-exporter/src/main/java/software/amazon/lambda/durable/telemetry/exporters/SQSExporter.java @@ -13,7 +13,6 @@ import software.amazon.awssdk.services.sqs.SqsClient; import software.amazon.awssdk.services.sqs.model.MessageAttributeValue; import software.amazon.awssdk.services.sqs.model.SendMessageRequest; -import software.amazon.lambda.durable.annotations.Experimental; import software.amazon.lambda.durable.telemetry.DurableExecutionTelemetryRecord; import software.amazon.lambda.durable.telemetry.Json; import software.amazon.lambda.durable.telemetry.TelemetryExporter; @@ -23,7 +22,6 @@ * {@code status} / {@code functionName} message attributes. On a FIFO queue the group id defaults to the execution ARN * and the deduplication id is the execution ARN plus {@code emittedAt}. Requires {@code sqs:SendMessage}. */ -@Experimental public final class SQSExporter implements TelemetryExporter { private final String queueUrl; private final String messageGroupId;