DanielLeens commented on PR #12161:
URL: https://github.com/apache/seatunnel/pull/12161#issuecomment-5674313772

   Thanks @SEZ9 — good catch that I hadn't re-checked the commit list closely 
enough; the fan-out rework actually landed already, in `93e11ea7f0a1` 
(2026-09-09T13:11:39Z, right after my last comment), so I went and read that 
diff directly against `BaseService.java` rather than taking the commit message 
on faith. Confirming each point:
   
   - **F2 (serial fan-out)** — resolved. 
`getSystemMonitoringInformationJsonValues()` now dispatches 
`sendOperationToMemberNode` for every member into a `LinkedHashMap<Address, 
InternalCompletableFuture<Object>>` first, then hands it to a new 
`collectHealthMetrics(...)` that computes one `deadlineNanos` up front and 
awaits each future for `Math.max(1, deadlineNanos - now)`. Total wait is now 
bounded by the shared deadline, not `timeout * member count`.
   - **F1 (anonymous `{}` on timeout, hardcoded timeout)** — resolved. The 
deadline is now `seatunnel.engine.health-metrics-timeout-seconds` (new `Option` 
in `ServerConfigOptions.MasterServerConfigOptions`, default 3s, wired through 
`EngineConfig`). A member that times out, fails dispatch, or fails execution is 
reported via `unfinishedMember(address, reason)` with `host`/`port`/`error` 
(`timeout` / `dispatch-failure` / `execution-failure`) instead of an empty 
object.
   - **F4 (interrupt handling)** — resolved. `InterruptedException` now logs a 
warning, restores the interrupt flag, and `break`s out of the collection loop 
instead of continuing to iterate. One residual, non-blocking note: the members 
not yet processed at that point are simply omitted from the response array 
rather than getting their own marker entry (see 
`testInterruptStopsWaitingForRemainingMembers`, which asserts 0 entries for 2 
members) — still silent at the HTTP layer even though it's now logged 
server-side. Low severity, fine as a follow-up rather than a blocker.
   - **F5** — confirmed, the duplicate `TimeUnit` import is gone, and the 
`Build` check on the current head is green, which includes Spotless.
   - **F3** — confirmed, `docs/en(zh)/engines/zeta/rest-api-v1.md` and 
`rest-api-v2.md` both got a new paragraph describing the shared deadline and 
the `error` marker shape.
   - **F7** — resolved with your suggested approach: `cancel(true)` became 
`cancel(false)` plus an explicit comment that cancel only releases the local 
future and can't stop the remote operation.
   
   Test coverage: the new `BaseServiceHealthMetricsTest` covers timeout, the 
shared-deadline bound, interrupt-stops-remaining, execution-failure and 
dispatch-failure, all against directly-constructed `InternalCompletableFuture`s 
with no `Thread.sleep`/wall-clock flakiness — rating this **Stable**.
   
   With that verified, I don't have any remaining code-level blockers on my 
side — F6 stays an accepted non-blocking follow-up as we agreed. CI is green on 
`93e11ea7f0a1`. The PR still shows `mergeable_state: blocked`, which looks like 
a branch-protection/review-count gate rather than a conflict or CI issue; since 
I'm a comment-only reviewer here, that part is for you/a committer to clear. 
From the code side, this is ready to merge.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to