Orchestrator backpressure
Harn applies backpressure at the HTTP ingest edge, the durable trigger queue, and dispatcher destinations. The goal is to slow new work before one noisy source, one slow handler, or one unhealthy peer can starve the rest of the orchestrator.
HTTP ingest
harn orchestrator serve uses token buckets before webhook normalization:
- one global bucket for all incoming trigger requests
- one per-source bucket keyed by provider id
When either bucket is empty, the listener returns 503 Service Unavailable
with a Retry-After header. Providers can retry normally; requests that were
accepted before saturation have already been appended to the durable pending
log.
The default limits are intentionally permissive for local development:
- global capacity: 4096 requests
- per-source capacity: 1024 requests
- refill: 1024 requests per second
Operators can tune the process with:
HARN_ORCHESTRATOR_INGEST_GLOBAL_CAPACITY=4096
HARN_ORCHESTRATOR_INGEST_PER_SOURCE_CAPACITY=1024
HARN_ORCHESTRATOR_INGEST_REFILL_PER_SEC=1024
Dispatch queue
The EventLog is the durable queue. The long-running inbox pump admits only a bounded number of outstanding dispatch tasks, so a full pump stops reading new inbox envelopes and leaves its cursor unacked until capacity is available.
Manifest flow-control gates provide per-trigger controls:
concurrencylimits handler slots and queues waiters by optional prioritythrottledelays excess work until the window has capacityrate_limitskips excess work for a windowbatch,debounce, andsingletoncollapse or suppress redundant work
Destination circuits
The dispatcher keeps a process-local circuit per handler destination, keyed by handler kind and target URI. Five consecutive retryable failures open the circuit for 60 seconds. While open, new events for that destination fail fast into the trigger DLQ instead of starting another retry spiral.
After the backoff period, the next request is treated as a half-open probe. A successful probe closes the circuit; a failed probe opens it again for another backoff window.
Metrics
All backpressure decisions increment:
harn_backpressure_events_total{dimension, action}
Current dimensions include ingest and circuit. Pair this with
harn_trigger_accepted_to_dlq_seconds, harn_trigger_oldest_pending_age_seconds,
and harn_orchestrator_pump_outstanding to alert on sustained degradation.