mirror of
https://github.com/openziti/ziti.git
synced 2026-09-10 00:35:41 +00:00
ae8972bc24
- Creates a router sender on demand when an untracked router subscribes to the data model, so non-edge (transit) routers receive their controller-managed configuration without going through the edge connect/sync flow - Marks on-demand senders as supporting the router data model so they receive live model updates, not just the initial sync - Restricts the legacy api-session/session broadcasts to edge routers, since routers register those handlers universally and would otherwise load session state they never use. A router counts as edge when an edge router record exists for its id, which is how both the connect path and the subscribe path classify it; senders carry the result as an atomic edge flag and the fanout walks them via RangeEdge. Classification is fixed for the life of a connection, so a record added or removed under a live connection takes effect on reconnect. Transit routers also never receive the initial session state, which only follows a hello - Adds a race-safe routerTxMap.GetOrCreate keyed on the control channel; the subscribe path always routes through it, replacing a sender bound to a stale channel instead of enqueueing on a dead one, and resolves edge-router membership up front so a replaced edge sender is not demoted to transit - Adopts an existing sender for the connecting channel in RouterConnected instead of rejecting it as a duplicate connect; a subscribe that creates the sender first would otherwise leave the router with no server hello, so it never sends a client hello and never synchronizes while still being reported online - Removes routerTxMap.Add, leaving GetOrCreate as the only way a sender is installed - Classifies a connecting router as edge by id rather than by fingerprint, matching the disconnect and subscribe paths, and logs an unexpected store error instead of discarding it - Removes the unused RouterSender.EdgeRouter field and drops the edge router argument from the RouterConnected handler - Generalizes router connect/disconnect logging that previously assumed edge routers - Updates the strategy flow comment and RouterSender godoc, which described senders as edge-only and referenced the removed EdgeRouter field - Documents that api-session-added events and the legacy session model (API and service sessions) are deprecated for removal in OpenZiti 3.0 - Adds unit tests for GetOrCreate (create/reuse/stale-replace/concurrent), the edge-only fanout filter, and RouterConnected adopting a subscribe-created sender