Repository navigation
Conversation
When a reservation refresh fails, refreshRelayReservation drops the relay but, unlike the disconnect path, never triggers maybeConnectToRelay. Remaining candidates sit unused and the node can stay below the desired number of relays until the candidates expire (30 min by default). Notify the relay finder after removing a relay we were using, the same way the disconnect path does.
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.
When a reservation refresh fails (e.g. the relay disabled its relay service, which keeps connections open, or refused for resource limits),
refreshRelayReservationdrops the relay but never triggersmaybeConnectToRelay. The disconnect path incleanupDisconnectedPeersdoes the same delete but also callsnotifyMaybeConnectToRelay()andnotifyMaybeNeedNewCandidates().Since
findNodesdoesn't poll the peer source whilelen(candidates) >= minCandidates, the remaining candidates sit unused and the node can stay belowdesiredRelays(possibly with no relay addrs) untilclearOldCandidatesexpires them, 30 min by default.This notifies after removing a relay we were using, mirroring the disconnect path.
TestConnectOnRefreshFailureis modelled onTestConnectOnDisconnect: the relay in use stays connected but stops serving the hop protocol, so the next refresh fails. It fails on master (no replacement is ever picked) and passes with the fix.go test -race ./p2p/host/autorelay/...passes.