Skip to main content

Background Jobs

The Rust appview keeps the firehose path on a single tokio runtime without a separate job queue. Two long-running tasks are worth naming:

Reconnect supervisor

ReconnectingEventStream::with_cursor wraps the Jetstream connection in an exponential-backoff loop. On WebSocket disconnect the supervisor sleeps BackoffPolicy::default(), requests a new connection from the factory closure (passing the most recent committed cursor), and resumes. The drive_indexer loop sees the gap as a normal next_event call.

Observer

layers-observer runs aggregate methods on a schedule. The shipped method annotation_coverage is pure (it takes input slices and returns an ObservationReport) so the schedule lives in the binary's main loop rather than a queue. A deployment that needs more methods adds them under crates/layers-observer/src/methods.rs and registers them in observer-spec/methods.json.

There is no separate worker tier and no DLQ. If a record requires expensive enrichment downstream, the operator runs a second RecordSink impl that performs the work in-handler or hands the record off to an external service the operator owns.