Skip to content

v0.23.0 — zone-aware placement for the second tunnel session

Choose a tag to compare

@github-actions github-actions released this 05 Sep 20:36
· 11 commits to main since this release
9d80995

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.md covers what to set and where Kubernetes (topology.kubernetes.io/zone node 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.