mirror of
https://github.com/openziti/ziti.git
synced 2026-10-25 21:20:03 +00:00
de2ba06f98
A fault was handled by spawning a goroutine per message, so a burst of faults spawned without limit. Handling them inline instead would put the burst on the receive goroutine, which carries every other default priority message on that underlay. - adds a pool for work lifted off a control channel's receive goroutine, kept separate from the rate limiter pool, whose workers park waiting for controller send capacity; sharing it would make receiving depend on the very back-pressure that lifting work off the receive goroutine exists to survive - hands fault handling to that pool, and falls back to spawning when the pool is full rather than dropping, since a dropped fault leaves a dead link marked up with no repair loop behind it - counts the fallbacks, so the pool being too small is visible rather than silent - sizes the queue generously and the worker count modestly: the work arrives in bursts, one per controller reconnect, but is per control channel and there are only ever a handful of those