termtap/doc/event-pressure-notes.md
Hayden Hargreaves 365fb43eca feat: FINALLY got HTTPS working :)
Going to work on UI now.
2026-04-18 22:25:04 -07:00

1.9 KiB

Event Pressure Notes

This is a quick note on potential event-channel pressure in the current proxy architecture.

Why this matters

Proxy request handling currently emits events synchronously into a shared channel. If producers are faster than the consumer (TUI/event loop), the channel can fill and block producers. When that happens, request handling can stall even if upstream/downstream network paths are healthy.

Where pressure comes from

  • Every request can produce multiple lifecycle events (started, finished, failed, warnings).
  • CONNECT + MITM flow can emit both tunnel-level and inner-request events.
  • Bursty traffic (many small requests, retries, connection churn) amplifies event rate quickly.

User-visible symptoms

  • Request latency spikes that do not match upstream timings.
  • Intermittent pauses during high traffic.
  • Shutdown/restart feeling delayed when many events are in flight.

Current risk profile

  • Channel buffer size helps absorb bursts, but only up to a point.
  • Backpressure is currently coupled to request path execution, so stalls propagate into proxy behavior.

Mitigation options

  1. Introduce non-blocking event enqueue for low-priority events.
    • Keep critical events blocking (fatal/start/stop), but drop or coalesce high-volume request events under load.
  2. Add an internal event relay.
    • Proxy handlers write to a local buffered queue; a dedicated goroutine forwards to the main channel.
  3. Coalesce repetitive events.
    • Aggregate similar warnings or per-interval request counters instead of per-request chatter.
  4. Add lightweight metrics.
    • Track dropped/coalesced events and queue depth so pressure is visible during development.

Practical near-term suggestion

Start with a small event relay + drop policy for non-critical request events when queue depth is high. This contains proxy-path stalls without changing the external event model too much.