-
fix(uplink): never pick our own URL; drop stale peer-advertise rows and measures
Release / frontend (push) Canceled after 0sRelease / linux (amd64) (push) Canceled after 0sRelease / linux (arm64) (push) Canceled after 0sRelease / windows (push) Canceled after 0sRelease / macos (push) Canceled after 0sRelease / release (push) Canceled after 0sBuild and Push Docker Image / build-and-push (push) Canceled after 0sreleased this
2026-06-11 23:44:10 +03:00 | 228 commits to main since this releaseAfter a cluster rename the catalog still held this node's URL under the
old cluster id ('local'), the picker's own-cluster filter no longer
matched it, and — being the lowest-RTT entry — it won Pick(): the spoke
shipped batches to ITSELF and logged 'peer returned 404: bridge
receiving is not enabled on this node' with no way to remove the entry.Three layers:
- applyPeerNodeAdvertise deletes rows advertising the same URL under a
different (cluster_id, node_id) — a URL is one node endpoint, the old
identity is stale by definition; - the picker takes the node's own advertise URL and excludes it from
seeds, catalog probes and Pick(); - probeOnce prunes measurements whose URL fell out of the probe list,
so catalog/config changes actually remove entries instead of leaving
a frozen healthy sample that keeps winning forever.
Covered by live picker tests (httptest ping servers + sqlite catalog).
Downloads
- applyPeerNodeAdvertise deletes rows advertising the same URL under a