Repository navigation
fix: re-evaluate unavailable country exits during recovery - #250
Merged
Merged
Conversation
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
A previously healthy country exit can become unreachable while retaining listener-ready status. The freeze policy deliberately keeps an exit that carried IMS for a long time, but subsequent
egress_unavailablestartup failures only scheduled another rebuild. The line could therefore retry the same dead node indefinitely.After an automatic recovery start fails, validate the current container SOCKS exit with the existing DNS/STUN UDP probes. Three attributed failures use the existing bounded node-selection policy, irrespective of historical uptime; a successful probe clears that node's strikes. Exhausting the pool keeps hourly backoff. Carrier DNS problems alone, configuration errors and engine failures are not evidence against a node.
Probe evidence is tied to a fresh configuration fingerprint, selected node/tag and listener endpoint, and rechecked before attribution. Manual pins, direct/host routes, pools without alternatives, registered same-country peers and user cancellation prevent this recovery path from changing the exit. Probes run off the event loop and only after failed starts. Normal freeze attribution remains conservative.
CI also identified the existing Vite 6.4.3 audit failure. The lockfile now selects the compatible 6.4.5 patch; npm audit reports zero vulnerabilities and the rebuilt static asset names are unchanged.
Validation
b3f2b01(198.4 seconds). The subsequent commit only updates the Vite lockfile and changelog; its CI is running.NAS rollout
Applied local Control overlay
mdd-sim-gateway/control:v1.14.0-exit-failover-20261022on the existing v1.14.0 image after checking that both lines had no active calls. Both engine containers retained their running generations and both US/UK IMS registrations remain registered. A live independent UDP probe of the selected US exit succeeds.Rollback Compose backup:
/volume1/docker/mdd-sim-gateway/backups/compose-before-exit-failover-20261022.yaml. Rollout metadata:/volume1/docker/mdd-sim-gateway/backups/exit-failover-20261022.json. Restoring that Compose backup and recreating onlycontrolreturns to the original v1.14.0 Control image. An official upgrade can replace this local overlay; this PR targetsdevelopfor inclusion in a release.Safety and privacy impact