aws / aws/aws-durable-execution-sdk-java

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

Offen Anfängerfreundlich
#705 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug needs-triage pkg:sdk
Vorherrschende Sprache
Java
Sterne
28
Forks
11
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
47

Beschreibung

### 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.

Service constant (`DurableExecutionsServiceSharedLib`, `ValidationErrorMessages.java` line 86, internal):

```java
public static final String INVALID_CHECKPOINT_TOKEN = "Invalid checkpoint token";
```

SDK constant (`sdk/src/main/java/software/amazon/lambda/durable/util/DurableApiErrorClassifier.java`):
https://github.com/aws/aws-durable-execution-sdk-java/blob/7f1a73ca16308d31a1e5a270e504676caf890e0b/sdk/src/main/java/software/amazon/lambda/durable/util/DurableApiErrorClassifier.java#L51

```java
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)

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in sdk/src/main/java/software/amazon/lambda/durable/util/DurableApiErrorClassifier.java, insbesondere beim Präfix INVALID_CHECKPOINT_TOKEN und bei classifyException(). Überprüfe die vorhandenen Unit-Tests, aktualisiere sie so, dass sie die kleingeschriebene Nachricht des Service verwenden, und verifiziere, dass ein veraltetes Checkpoint-Token als wiederholbarer Invocation-Fehler statt als nicht wiederholbarer Ausführungsfehler klassifiziert wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
88/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.