aws / aws/aws-durable-execution-sdk-java
[Docs]: Document finally cleanup behavior during durable suspension
- 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ả
## Issue
The `Handling SuspendExecutionException` section correctly explains that `SuspendExecutionException` extends `Error`, bypasses a normal `catch (Exception e)`, and must never be swallowed.
It does not currently explain the related `finally` behavior: Java executes an active `finally` block while `SuspendExecutionException` unwinds the stack. As a result, resource cleanup placed in `finally` can run during a normal durable suspension rather than only when the overall durable execution succeeds or fails.
This applies to any operation that can suspend, including `wait`, `waitForCondition`, callbacks, invokes, retry delays, and suspension inside map or parallel branches.
For example, this pattern can terminate a resource immediately when the wait suspends:
```java
try {
var resource = ctx.step("launch-resource", Resource.class,
stepCtx -> launchResource());
var result = ctx.waitForCallback("work-complete", Result.class,
(callbackId, stepCtx) -> dispatchWork(resource, callbackId));
return result;
} finally {
ctx.step("terminate-resource", Void.class,
stepCtx -> terminateResource());
}
```
## Page/Location
https://github.com/aws/aws-durable-execution-sdk-java/blob/main/docs/advanced/error-handling.md
Section: `Handling SuspendExecutionException`
## Suggested Fix
Extend the section with guidance that:
- `finally` executes when the internal suspension signal unwinds the handler stack.
- Durable cleanup that must happen only on completion or actual failure should not be placed in `finally` around suspending operations.
- Cleanup should run explicitly after successful completion and from handlers for application or operation exceptions.
- `SuspendExecutionException` must continue to propagate untouched; avoid `catch (Throwable)` unless it immediately rethrows suspension and other control-flow errors appropriately.
Include a safe Java example such as:
```java
try {
var result = performDurableWorkThatMaySuspend(ctx);
ctx.step("cleanup-resource", Void.class,
stepCtx -> cleanupResource());
return result;
} catch (Exception e) {
ctx.step("cleanup-resource", Void.class,
stepCtx -> cleanupResource());
throw e;
}
```
The cleanup step occupies the same next durable-operation position on either terminal path, while `SuspendExecutionException` bypasses `catch (Exception e)` and suspends normally.
This is the Java-specific companion to the shared documentation request: https://github.com/aws/aws-durable-execution-docs/issues/131.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu trong docs/advanced/error-handling.md tại phần “Handling SuspendExecutionException” và xem lại yêu cầu tài liệu dùng chung được liên kết để nắm bối cảnh. Ghi lại cách finally hoạt động trong khi tạm dừng, giải thích vị trí đặt thao tác dọn dẹp an toàn và cách ngoại lệ được truyền đi, đồng thời đưa vào ví dụ Java được đề xuất; phần này hoàn tất khi bao quát cả trạng thái tạm dừng bình thường và các đường dẫn dọn dẹp khi kết thúc.
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
- documentation
- Loại issue
- Tài liệu
- Độ khó
- 1/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