feat(addressbook): prune stale entries by last-seen time#5513
Draft
martinconic wants to merge 1 commit into
Draft
feat(addressbook): prune stale entries by last-seen time#5513martinconic wants to merge 1 commit into
martinconic wants to merge 1 commit into
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.
Checklist
Description
Implements address book pruning (#5491).
The address book recently gained a wrapping
verifiedAddress{Address, Verified}struct (v2.8.0, #5477). This PR extends it with a last-seen timestamp and uses
it to drop peers we have not seen for over a month, preventing the address book
from accumulating stale, unreachable peers indefinitely.
Changes
pkg/addressbookLastSeen(unix seconds) toverifiedAddress.PutstampsLastSeenon every write — covers the hive gossip path, whichPuts on each sighting.UpdateLastSeen(overlay): read-modify-write that bumps only the timestamp; no-op if the overlay is absent.Prune(before time.Time): removes entries last seen before the cutoff. Entries withLastSeen == 0are kept.pkg/topology/kademlia: callUpdateLastSeenon successful connection, both outbound (connectionAttemptsHandler) and inbound (onConnected). Failures are debug-logged and non-fatal.pkg/node: prune entries not seen for 30 days at startup, right after the address book is constructed. Warning-logged and non-fatal so it never blocks boot.pkg/statestore/storeadapter: migration step 10 stampslast_seen = now()onto existing entries that lack it (merging into the JSON object so all fields are preserved). Without this, the first prune after upgrade would wipe the whole address book.AI Disclosure