aws / aws/aws-durable-execution-sdk-java
[Bug]: Invalid checkpoint token misclassified as execution failure (message case mismatch)
- Ngôn ngữ chính
- Java
- Star
- 28
- Fork
- 11
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 47
Mô tả
### 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)
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu trong sdk/src/main/java/software/amazon/lambda/durable/util/DurableApiErrorClassifier.java, đặc biệt là tiền tố INVALID_CHECKPOINT_TOKEN và classifyException(). Xem lại các unit test hiện có, cập nhật chúng để sử dụng thông báo viết thường của service, và xác minh rằng stale checkpoint token được phân loại là lỗi invocation có thể retry thay vì lỗi execution không thể retry.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 88/100