Fix/reliable inter daemon output close - #3071
Conversation
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
|
Automated review by Claude — fully automated, may contain mistakes; please verify before acting. I found the following issue(s): Making
Net effect: sustained back-pressure to a remote daemon that keeps the 256-slot channel full for more than ~30 ms (3 × 10 ms) now converts a single dropped inter-daemon message into a fatal daemon exit. That is a strictly more severe failure mode than the previous warn-and-drop for regular outputs. Note the PR's motivating case — Secondary: the retry sleep blocks the single-threaded event loop. Worth deciding whether channel-full for the regular output path should be fatal at all, or whether the retry should avoid stalling the event loop (e.g. handled off the main loop / bounded without an inline sleep). Generated by Claude Code |
523b5ce to
192c825
Compare
|
Automated review by Claude — this is a fully automated review with no human in the loop; please verify before acting on it. One scope note in addition to the earlier review. The stated change here is the inter-daemon publish retry ( That refactor is the whole content of #3070 and also appears verbatim in #3072, so the same change is currently duplicated across three PRs and is hard to review independently here. If these are meant to be stacked on #3070, it would help to note the dependency (or rebase once #3070 lands); otherwise the classifier is orthogonal to the Zenoh fix and would be much easier to review on its own. It also changes descriptor acceptance — Generated by Claude Code |
192c825 to
9122842
Compare
|
🤖 Automated review by Claude Code — fully automated review, not vetted by a human. Thanks for splitting the data-plane path off — routing regular I checked whether the reliable path (
Also, as previously noted, this diff still bundles the unrelated ~385-line node-classifier refactor from #3070, which is orthogonal to the close-handling fix. Generated by Claude Code |
|
🤖 Automated review by Claude Code — fully automated review, not vetted by a human. Reviewed the latest push: the unrelated ~385-line node-classifier refactor (flagged in the prior reviews as bundled from #3070) is now gone, so this PR is scoped to just the Zenoh publish-enqueue change — that resolves the earlier scope note. No new issues in the current diff, and the data-plane split (regular Two earlier points remain outstanding on the reliable path and are unchanged by this push:
Generated by Claude Code |
|
🤖 Automated review by Claude — this is a fully automated review with no human in the loop. Treat it as advisory. The latest commit ( I found one new issue introduced by the two-channel prioritization, though:
That reorders close ahead of data on a single logical stream — a data-loss window that didn't exist when both events shared one FIFO channel on The added backpressure unit tests ( Generated by Claude Code |
|
🤖 Automated review by Claude — fully automated, no human reviewed this; please verify before acting. Re-reviewed after the latest push ( The prior review's blocking concern — the two-channel priority split letting a later
Ordering within a single output holds: both events share one FIFO with one consumer (the drain task), there is no post-close data on that output, and tokio's mpsc hands the next freed permit to the queued No new issues found in the current diff. Generated by Claude Code |
|
🤖 Automated review by Claude — fully automated, no human in the loop; treat the findings as suggestions to verify rather than as authority. First, the good news: this does not repeat the #3072 defect. The diff never touches 1. The stated guarantee is not delivered. Failure scenario: the remote link is saturated, node A finishes, the close event now survives the 256-slot channel and reaches 2. None of the eight added tests exercise the fix. Concretely: revert the 3. 4. A reported metric changes meaning silently. 5. |
Summary
Fix inter-daemon messages being silently dropped when the Zenoh publish drain channel is full.
send_to_remote_receiversnow retries full-channel enqueue attempts briefly and returns an error if the message still cannot be queued, instead of logging a warning and returningOk(()). This prevents control events likeOutputClosedfrom being lost without the caller knowing.