• fix(raft): always derive a node's advertise URL so the leader publishes its HTTP URL
    Release / version (push) Canceled after 0s
    Release / frontend (push) Canceled after 0s
    Release / linux (amd64) (push) Canceled after 0s
    Release / linux (arm64) (push) Canceled after 0s
    Release / windows (push) Canceled after 0s
    Release / macos (push) Canceled after 0s
    Release / release (push) Canceled after 0s
    Build and Push Docker Image / build-and-push (push) Canceled after 0s

    LastSkywalker released this 2026-06-21 14:22:07 +03:00 | 113 commits to main since this release

    A 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_01U3LvJu9qZfspPr21TW9ptv

    Downloads