aws / aws/aws-durable-execution-sdk-python

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

Đã đóng Phù hợp với người mới
#721 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug needs-triage pkg:sdk
Ngôn ngữ chính
Python
Star
53
Fork
25
Merge trung bình
1 ngày 19 giờ
Pull request đã merge (30 ngày)
40

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 (`packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/exceptions.py`):
https://github.com/aws/aws-durable-execution-sdk-python/blob/8742ad9c9535e1de042963963c6b439f656894ce/packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/exceptions.py#L16

```python
INVALID_CHECKPOINT_TOKEN_PREFIX: str = "Invalid Checkpoint Token"
```

Used by `_classify_error_category()` via `(error.get("Message") or "").startswith(INVALID_CHECKPOINT_TOKEN_PREFIX)`.

Test that encodes the wrong string: `tests/exceptions_test.py` (`"Invalid Checkpoint Token: token expired"`).

### 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 (8742ad9)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/exceptions.py và tests/exceptions_test.py, sau đó chạy các bài kiểm thử của bộ phân loại bằng cách sử dụng đúng kiểu viết hoa chữ thường trong thông báo thực tế của dịch vụ. Hoàn tất khi lỗi checkpoint cũ được phân loại là lỗi gọi và các bài kiểm thử không còn mã hóa thông báo không khớp nữa.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
api
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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.