You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Build a transport-neutral, in-process stored-mutation substrate for AlertService and SilenceService watch RPCs.
The broker must be bounded and non-blocking so a slow client cannot stall alert ingestion, dispatch, silence storage, HA merge, configuration reload, or other API traffic.
Mutation broker
Provide:
Atomic snapshot-plus-subscribe handoff.
An explicit snapshot-complete event.
Monotonic node-local sequence numbers.
Immutable before/after payloads and resource IDs.
Bounded, non-blocking per-subscriber queues.
Explicit ResourceExhausted and resnapshot behavior on overflow.
Cancellation cleanup, stream count, lifetime, and idle controls.
Metrics for subscriptions, active consumers, overflow, and forced closure.
Cursors are node-local and non-durable. They do not promise replay after restart, failover, or reconnection to another HA peer.
Domain mutation feeds
Alerts
Extend the memory alert provider with non-blocking publication for accepted create, update, delete, and GC mutations. Do not attach one existing provider subscription per RPC client: current listeners can block alert ingestion while the provider mutex is held.
Alert groups
Add dispatcher/group and group-marker observers for stored group creation, update, deletion, content, and marker mutations. Publish only after releasing hot-path locks.
Do not synthesize mutations solely because silence/inhibition evaluation, route configuration, wall-clock time, or time intervals changed computed output.
Silences
Publish local Set/Expire mutations, replacement expire-plus-create, accepted HA Merge changes, and GC purge. Natural pending-to-active and active-to-expired transitions are derived from timestamps and are not mutation events.
Filtering
Derive entered, updated, and exited transitions from immutable before/after data as resources cross subscription filters. Avoid unbounded per-client membership state.
Acceptance criteria
Snapshot and subscription handoff cannot lose an accepted mutation.
Every snapshot ends with an explicit snapshot-complete marker.
Slow subscribers cannot block domain hot paths.
Queue overflow terminates with documented resnapshot semantics.
Cancellation and forced closure release queues and admission capacity.
Node-local cursor scope and restart/HA limitations are documented.
Alert, group, marker, local silence, HA silence, replacement, and GC mutations are covered.
Timer-only and recomputed transitions are not emitted.
Ginkgo/Gomega race and backpressure specs cover ordering, overflow, cancellation, HA merge, and lock isolation.
Parent: #5450
Summary
Build a transport-neutral, in-process stored-mutation substrate for AlertService and SilenceService watch RPCs.
The broker must be bounded and non-blocking so a slow client cannot stall alert ingestion, dispatch, silence storage, HA merge, configuration reload, or other API traffic.
Mutation broker
Provide:
ResourceExhaustedand resnapshot behavior on overflow.Cursors are node-local and non-durable. They do not promise replay after restart, failover, or reconnection to another HA peer.
Domain mutation feeds
Alerts
Extend the memory alert provider with non-blocking publication for accepted create, update, delete, and GC mutations. Do not attach one existing provider subscription per RPC client: current listeners can block alert ingestion while the provider mutex is held.
Alert groups
Add dispatcher/group and group-marker observers for stored group creation, update, deletion, content, and marker mutations. Publish only after releasing hot-path locks.
Do not synthesize mutations solely because silence/inhibition evaluation, route configuration, wall-clock time, or time intervals changed computed output.
Silences
Publish local Set/Expire mutations, replacement expire-plus-create, accepted HA Merge changes, and GC purge. Natural pending-to-active and active-to-expired transitions are derived from timestamps and are not mutation events.
Filtering
Derive entered, updated, and exited transitions from immutable before/after data as resources cross subscription filters. Avoid unbounded per-client membership state.
Acceptance criteria
Dependencies