Repository navigation
fix(network): report and retry a psn receiver or osc listener that is down - #484
Merged
Merged
Conversation
… down The network plane observer judged the PSN plane by its sender alone, so a PSN receiver that failed to bind at startup left the plane reading ok: no row, no retry, no viewer markers until the next interface change. The OSC input plane was followed only while its listener ran, so a listener that failed to restart (port taken) dropped out of the observer altogether and stayed off until the next OSC save. A plane now gets an optional `complete` check: a plane bound at the right address with a part not up is rebound like an unbound one, so the failure is a failing row retried with the observer's backoff. The PSN plane reads false there while its enabled receiver does not hold the sender's address; with no sender (PSN output failed to start) the receiver is the plane, so a bound receiver is no longer rebound once a second. Whether the OSC input plane is followed now reads config only. Its apply and suspend rebuild a listener that is not running from the config through the new `InputManager.resume_osc`, which raises while the port is taken, where `restart_osc` keeps logging and carrying on for the config dispatcher. Fixes #421 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cards Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A switched-off receiver never binds, so its bound address already reads None. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cribe Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
Review roundsEach round was a fresh, full review of Round 1
Round 2
Round 3Nothing beyond cosmetic or rare. Cosmetic, left as is
Rare, left as is
Results
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #421.
Two input planes could stay off after a failure without being reported:
ok. No row was raised and the receiver was never started again.OSC inputplane was only followed while its listener was running. If a restart failed (port taken), the listener was left unset and the plane dropped out of the observer. OSC input then stayed off with no row until the next OSC save.A plane that is not running is now reported as
failingand retried with the observer's existing backoff (2 s, doubling to 60 s), whichever part of it failed. The rows use the existing plane-failure format,<plane>: <interface> – <reason>. There is no new status level or row type.Plan
Plane.complete. A plane bound at the right address with one part not up is rebound like an unbound plane.completeis false while the enabled receiver does not hold the sender's address. When there is no sender (PSN output failed to start),currentis the receiver's address.InputManager.resume_osc: rebuilds OSC input from the live config and raises while the listener cannot bind.restart_oscstill logs and carries on for the config dispatcher.Notes
restart_oscfrom.Test plan
failingon the HUD and in the snapshot, and the retry waits out the backoff (tests/test_network_observer.py)failingrow and output keeps sending. It is not retried inside the backoff and recovers afterwards. With PSN input switched off the plane is not touched. A bound receiver with no output is left alone (tests/test_services_startup.py)tests/test_services_startup.py)resume_oscrebuilds from the live config, raises on a bind failure, and drops the path and operator-message adapters with their cards (tests/test_input_manager_remaining.py)make ci-remoteon the testing PiPSNrow and recovers on its own once the bind succeedsOSC inputrow, and OSC input comes back with its membership once that process lets goOut of scope: an OSC listener that fails while OSC input follows no interface (unpinned on auto-detect, or no multicast group) has no plane to report it; that is #481.
🤖 Generated with Claude Code