Repository navigation
v0.23.0 — zone-aware placement for the second tunnel session
Upgrade step (relay operators)
relay_instances gains a nullable zone column. The schema is applied with CREATE TABLE IF NOT EXISTS, which skips an existing table, so on a live database run one of these before the new relays and edge start, or every heartbeat fails on the missing column:
ALTER TABLE relay_instances ADD COLUMN zone TEXT;or, as with the last two releases, drop the two pool tables and let the binaries recreate them:
DROP TABLE agent_owners, relay_instances;Nothing on the wire changed. Agents need no update and no re-enrollment; roll relays and the edge in any order.
What's new
Zone-aware placement for the second tunnel session (#531, fifth child of the scale-out epic #524). A relay may now label its failure zone with the optional PIPER_RELAY_ZONE environment variable. When an agent already holds a session on a relay in zone X, piper-edge prefers a relay outside X for the second session, ahead of load, so a zone outage does not take both. Zone is a preference, never a filter: if every candidate is in X, placement falls back to fewest sessions as before.
- Unset means unknown and never counts as a clash. Pools that never set the variable are placed exactly as in v0.22.0.
- Set it on every relay or on none. A zoneless relay is always eligible as "a different zone", so a mixed pool can put both sessions in one physical zone without the edge knowing.
- Runbook:
docs/runbooks/relay-deploy.mdcovers what to set and where Kubernetes (topology.kubernetes.io/zonenode label) and ECS (task metadata endpoint) expose it. A single-host compose deployment leaves it unset.
Design: docs/superpowers/specs/2026-09-05-zone-aware-placement-design.md.
Known issues shipped open
- #538 — a relay keeps pinging a session the agent has moved elsewhere for up to ~10 s after a duplicate dial.
- #537 — the e2e harness does not yet run on the supported topology (edge in front of two relays).
- #535 — compose recreates relay replicas together; there is no rolling relay restart on a single host.