-
fix(raft): always derive a node's advertise URL so the leader publishes its HTTP URL
Release / version (push) Canceled after 0sRelease / 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-21 14:22:07 +03:00 | 113 commits to main since this releaseA node joined via agent-join had no explicit advertise URL: performRaftJoin stored
the empty req.AdvertiseURL into the RuntimeConfig + .env (it only derived a URL for
the join-request body, not for the node itself). With an empty AdvertiseURL,
AdvertiseSelfNow no-ops, so the node never publishes itself into
peer_node_advertise. Once such a node becomes the leader, followers can't forward
writes to it — 'leader "X" has not published its HTTP URL yet
(peer_node_advertise empty)' — which blocks host upserts and self-advertise
cluster-wide.Fixes:
- AdvertiseSelfNow falls back to deriving the URL from the Raft advertise host +
the local HTTP port (ADDR, default 8080) when none is configured, so every node
self-advertises regardless of how it joined (operator can still pin
RAFT_ADVERTISE_PUBLIC_URL to override). Self-heals an already-joined node on
the next advertise tick. - performRaftJoin derives + persists the advertise URL when the joiner didn't
send one, so the value is correct in the RuntimeConfig and .env going forward.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01U3LvJu9qZfspPr21TW9ptvDownloads
- AdvertiseSelfNow falls back to deriving the URL from the Raft advertise host +