Skip to content

[Bug]: Invalid checkpoint token misclassified as execution failure (message case mismatch) #705

Description

@yaythomas

Expected Behavior

When the service rejects a checkpoint call with InvalidParameterValueException because the checkpoint token is stale (a newer invocation superseded this one), the SDK should classify the error as an invocation failure (retryable). The current invocation ends, and the service starts a fresh invocation with a fresh token. The execution itself continues.

Actual Behavior

The SDK classifies the error as an execution failure (non-retryable). So a stale checkpoint token fails the whole durable execution every time.

Root Cause

The classifier matches the error message with a case-sensitive prefix check against "Invalid Checkpoint Token". The service emits "Invalid checkpoint token" (lowercase c and t). The prefix check never matches. The error falls through to the generic 4xx branch, which is classified as an execution failure.

SDK constant (sdk/src/main/java/software/amazon/lambda/durable/util/DurableApiErrorClassifier.java):

private static final String INVALID_CHECKPOINT_TOKEN_MESSAGE_PREFIX = "Invalid Checkpoint Token";

private static final String INVALID_CHECKPOINT_TOKEN_MESSAGE_PREFIX = "Invalid Checkpoint Token";

Used in classifyException() via message.startsWith(INVALID_CHECKPOINT_TOKEN_MESSAGE_PREFIX). The Javadoc also documents the wrong string (4xx + "Invalid Checkpoint Token" → retryable).

Steps to Reproduce

  1. Have the service return a 4xx InvalidParameterValueException whose message starts with Invalid checkpoint token (the real service message).
  2. Pass it through the SDK error classifier.
  3. Observe it is classified as an execution (non-retryable) error rather than an invocation (retryable) error.

The existing unit tests do not catch this. They construct the error with the message "Invalid Checkpoint Token: token expired", which matches the SDK constant rather than the service constant.

Proposed Fix

  1. Change the SDK constant to "Invalid checkpoint token" so it matches the service.
  2. Consider a case-insensitive comparison to protect against future drift.
  3. Update the unit tests to use the real service message.

Related

Same defect exists in all three SDKs; each gets its own issue.

  • JS: aws/aws-durable-execution-sdk-js
  • Python: aws/aws-durable-execution-sdk-python
  • Java: aws/aws-durable-execution-sdk-java

SDK Version

main (7f1a73c)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpkg:sdkModule: sdk

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions