Fix reliable inter-daemon close handling - #3072
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 |
|
No issues found. The straggler-watchdog change is a correct narrowing of the previous behavior. Before, The two added tests assert meaningful behavior: One minor maintenance note (not blocking): 🤖 This is a fully automated review by Claude (Claude Code). No human has reviewed these comments before posting. Generated by Claude Code Generated by Claude Code |
|
Automated review by Claude — this is a fully automated review with no human in the loop; please verify before acting on it. Two scope notes.
The straggler-watchdog change itself looks correct: narrowing the global Generated by Claude Code |
d8cc0e4 to
b794884
Compare
|
Updated this PR to narrow the scope to the per-node finish-straggler watchdog What changed:
Current diff is now limited to:
The branch was force-pushed from |
|
🤖 Automated review by Claude — this is a fully automated review with no human in the loop. Treat it as advisory. Re-reviewed after the Aug 13 force-push that narrowed this PR to just the per-node finish-straggler watchdog fix in No issues found in the current diff. The change is a correct narrowing of the previous behavior: The two added tests are meaningful: Generated by Claude Code |
|
🤖 This is a fully automated review by Claude. No human has verified these findings. The per-node narrowing looks right, but I think the ordering of the new skip in The new Consider a distributed dataflow where source Suggest evaluating Generated by Claude Code |
|
Updated the PR to address the latest review feedback. The ordering in I also added a regression test:
This covers the case where a source-like node has both:
and verifies that an otherwise eligible local straggler is not escalated. |
|
The Aug 14 commit ( No further issues found in the latest diff. 🤖 This is a fully automated review by Claude (Claude Code) — no human reviewed it before posting. Treat it as advisory. Generated by Claude Code Generated by Claude Code |
|
🤖 Automated review by Claude — fully automated, no human has vetted this. Treat it as advisory and verify before acting. The Aug-14 fix correctly moved the
None => {
if node.connected && node.silent_for >= effective_grace {
eligible.push(node.id.clone());
} else {
return Vec::new(); // unconnected (still starting) OR connected-but-active => veto
}
}Because Failure scenario (the distributed case this PR targets):
On Suggested shape: keep On tests: the added cases only cover Generated by Claude Code |
|
Automated review by Claude (fully automated; no human in the loop) Re-checked after the
Suggested shape: gate only the two Generated by Claude Code |
|
Addressed the latest review by keeping Behavior now is:
Added regressions for:
Validation:
|
|
Re-checked after
A drained producer still flushing to a remote consumer is skipped from escalation without vetoing, so unrelated local stragglers stay watchdog-covered — the intended fix. The two added No further issues found in the current diff. 🤖 Fully automated review by Claude (Claude Code) — no human in the loop. Advisory only; please verify before acting. Generated by Claude Code |
b69033c to
39cf7c6
Compare
Introduces classify.rs with: - NodeClass enum (Standard/Custom/Runtime/Operator/Ros2Bridge) - classify() for non-module nodes: kind detection + whitelist check - check_module_fields() for module nodes before expansion - Per-kind whitelist constants and check functions - validate_against_whitelist() helper with custom hints Co-Authored-By: Claude <noreply@anthropic.com>
- Add classify::classify() call before resolution - Replace NodeKindMut resolution match with NodeClass match - Delete node_kind_mut() function and NodeKindMut enum - All field validation now happens in classify.rs whitelist Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
39cf7c6 to
ce60fa5
Compare
|
Resolved the 4 conflicts and rebased the branch onto current main. I also fixed the schema drift introduced by the bad conflict resolution:
Verified with:
|
|
Re-review after the latest push ( The straggler-watchdog change in But the latest rebase commit has re-bundled the descriptor-classifier changes that earlier reviews had gotten removed.
Neither change is mentioned in the PR description, and both are unrelated to the inter-daemon close / straggler fix. I'd rebase onto current 🤖 This is a fully automated review by Claude. It may contain mistakes — please verify before acting on it. Generated by Claude Code |
|
I removed the re-bundled descriptor-classifier changes from this branch and restored those files to current The PR diff is now scoped back to Validated with |
phil-opp
left a comment
There was a problem hiding this comment.
🤖 Automated review by Claude — generated fully automatically; no human has vetted it.
The latest commit (edc1152) drops the re-bundled #3070 classifier changes, so the PR is back to running_dataflow.rs scope as the earlier review asked. I re-checked the straggler-watchdog logic on the current head: the never_finishes veto and both return Vec::new() veto paths fire unconditionally, and remote_output_open guards only the two eligible.push(...) sites — so a drained producer still flushing to a remote consumer is exempted from escalation without disabling the watchdog for unrelated local stragglers. No new issues found; the latest commit looks safe to merge.
Generated by Claude Code
Summary
Fix two inter-daemon shutdown/routing cases that could leave dataflows hanging: