Repository navigation
Conversation
68c7d84 to
b77ee70
Compare
b77ee70 to
adbc139
Compare
adbc139 to
e398bc1
Compare
zibi-pplx
left a comment
There was a problem hiding this comment.
Thanks for ac9bc093. Owning a child of the supplied token fixes the issue I was going to raise, that close() would cancel the caller's token, and the new assertions cover it. The entry-point checks and waking uploads that are waiting for Open look good, and the biased select is cancellation-safe.
Requesting changes for one remaining lifecycle issue (inline): close() still aborts work that was already admitted, while the docs say it "may still finish". Non-blocking: require_running is duplicated, and configure_process_env could use a typed error (both inline). The same Kind/Firecracker CI note as #702 applies.
Review prepared with AI assistance (Claude Code); findings checked against the PR head.
ac9bc09 to
6e42222
Compare
6e42222 to
6feb124
Compare
7a3b32b to
7343afa
Compare
7343afa to
7c632eb
Compare
|
Follow-up review at The earlier caller-token isolation, duplicated admission check, and explanation for returning [P2, documentation] The advertised worker cancellation grace does not apply to service shutdown. The Please distinguish request cancellation, which can receive the supervisor grace, from service/parent cancellation, which can kill workers immediately. The same distinction needs to carry into #827's README, because drain-deadline expiry requests service cancellation too. Correcting the documentation preserves the current abortive behavior; changing token ownership would be a separate shutdown-policy change. This worker-kill behavior predates the stack; the issue here is the new public promise. Codex-assisted follow-up review, verified by tracing cancellation from the service through the pool to the worker supervisor. |
7c632eb to
0967526
Compare
Expose idempotent closure across execution handles. Reject filesystem and environment calls after cancellation, and wake uploads waiting for Open. Retain active-service behavior and the wire contract. Complete drain ownership and timeout reporting remain separate work.
Own a child of the caller's cancellation token and share it with the filesystem router. Parent cancellation still closes the service, while close and drain leave the caller's token alone. Extend the closure regression to check both directions and document that already-admitted same-key retry waiters can outlast closure.
0967526 to
aa8c274
Compare
Summary
Add idempotent
ExecutionService::close()to refuse new calls and cancel admitted work without cancelling the caller's token. Share the closure check across process, filesystem and environment operations. This PR's close is abortive; #827 adds graceful closure and bounded drain. Clarify that request cancellation can receive grace, while service cancellation can terminate identity workers immediately.Stacked on #740; follows the embedding RFC. Active-service daemon behavior and wire contracts are unchanged.
Validation
418 affected tests passed on the rebased stack, including five privileged probes. Formatting, affected all-feature/no-default-feature Clippy and doctests passed on Linux. Native macOS and Kind/Firecracker were not rerun locally; CI is pending on this head.
Severity and risk
Moderate: shutdown needs consistent admission closure. Embedding callers must handle the new result from environment configuration. Direct I/O cleanup can outlast cancellation grace. Revert with dependent changes to roll back.
AI assistance: Codex contributed code, tests and this description.