[Bug]: ctx.map returns MapResult items as LinkedHashMap instead of the declared result type
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Read sdk/src/main/java/software/amazon/lambda/durable/operation/MapOperation.java and trace how itemResultType reaches the serialized MapResult. Start with the existing MapIntegrationTest cases and add coverage for a POJO item on first execution and replay. Done means both paths return items as the declared type; an open pull request is already linked to this issue.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Expected Behavior
DurableContext.map(name, items, Class<O>, fn, config) returns a MapResult<O> whose items are instances of O. This holds on the first execution and on replay.
Actual Behavior
When O is a POJO or record, each item in the returned MapResult is a java.util.LinkedHashMap. Reading an item as O throws ClassCastException.
This happens on the first execution, not only on replay. On completion, MapOperation replaces its result with a serialize-then-deserialize copy, so the first execution returns the same value that replay returns.
Steps to Reproduce
public record Payload(String value) {}
@Test
void itemIsDeclaredType() {
var runner = LocalDurableTestRunner.create(String.class, (input, context) -> {
var result = context.map(
"m",
List.of("a", "b"),
Payload.class,
(item, index, ctx) -> new Payload(item),
MapConfig.builder().build());
Object first = result.getResult(0);
return first.getClass().getName();
});
var result = runner.runUntilComplete("x");
assertEquals(ExecutionStatus.SUCCEEDED, result.getStatus());
assertEquals(Payload.class.getName(), result.getResult(String.class));
}
The test fails:
expected: <...$Payload> but was: <java.util.LinkedHashMap>
SDK Version
main at 3.0.1-SNAPSHOT. Also reported on 2.x. On 1.2.1 the first execution returns Payload, and replay of a completed map returns LinkedHashMap.
Java Version
17
Is this a regression?
Yes
Last Working Version
None fully. 1.2.1 is correct on the first execution and wrong on replay.
Additional Context
The cause is in MapOperation. The constructor passes new TypeToken<>() {} to its superclass as the result type (sdk/src/main/java/software/amazon/lambda/durable/operation/MapOperation.java, line 83).
- That anonymous class is created inside the generic class
MapOperation<I, O>. - So the captured type is
MapResult<O>, withOstill a type variable. - So Jackson has no item type and deserializes each item as a
LinkedHashMap. - The constructor receives the caller's
TypeToken<O>asitemResultType. It stores it but does not use it to build the result type.
The existing MapIntegrationTest cases use String and Integer items. Jackson deserializes those correctly without type information, so the tests do not catch the bug.
The JavaScript SDK also returns the serdes round-trip of the batch result on both paths. Its items are plain JSON objects, which already match the declared TypeScript type. So keeping the round-trip and fixing the item type keeps Java consistent with JavaScript.
Suggested fix: build a parameterized MapResult<O> type from itemResultType, for example by letting TypeToken be created from a java.lang.reflect.Type. Add integration tests with a POJO item type for the first execution and for replay.
- Ngôn ngữ chính
- Java
- Star
- 28
- Fork
- 18
- Merge trung bình
- 18 giờ 16 phút
- Pull request đã merge (30 ngày)
- 62
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của aws/aws-durable-execution-sdk-java
-
bug pkg:conformance
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
aws/aws-durable-execution-sdk-java#844 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation pkg:sdk
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
aws/aws-durable-execution-sdk-java#645 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
aws/aws-durable-execution-sdk-java#300 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug pkg:telemetry
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 54/100
aws/aws-durable-execution-sdk-java#877 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug needs-triage pkg:sdk
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
aws/aws-durable-execution-sdk-java#859 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của aws/aws-durable-execution-sdk-java
Issue tương tự
-
Visual COBOL: missing 11.0 and 12.0, and 9.0 date differs from Rocket Software's lifecycle pageĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
endoflife-date/endoflife.date#11561 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug]: Surefire report output creates the parent folder also when "Create parent folder" is offĐang mởawaiting triage P3 Transforms
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] OpenSearch domain endpoint includes a URI scheme and breaks standard Terraform consumersĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
floci-io/floci#7707 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
checkstyle/checkstyle#22491 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
allow longer time between checksĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100