network: handle p2p addr expiration in ReplacePeerList #6518
+66
−1
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
Some p2p nodes report the following
{ "file": "p2p.go", "function": "github.com/algorand/go-algorand/network/p2p.(*serviceImpl).DialPeersUntilTargetCount", "level": "warning", "line": 322, "msg": "failed to connect to peer 12D3KooWRAqPqP9fb4Y3MoSuReXt6DfZeKgmUnb8vW1pKiVz8VjB: failed to dial: failed to dial 12D3KooWRAqPqP9fb4Y3MoSuReXt6DfZeKgmUnb8vW1pKiVz8VjB: no addresses", "name": "", "time": "2025-12-16T18:11:14.290014Z" }That is an indication of missing address component in
AddrInfodata struct representing peerstore peer entry.Cause: peerstore adds peers with
AddressTTLexpiration TTL, and thenReplacePeerListupdates it without refreshing addresses. libp2p will expire addresses in background but preserve peerID (see https://github.com/libp2p/go-libp2p/blob/master/p2p/host/peerstore/pstoremem/addr_book.go#L54).To fix, call
AddAddrson update.Test Plan
Added a unit test checking
ReplacePeerListstores addresses after a simulated expiration.