Skip to content

feat(ingest): park undeduped events on NATS while the dedupe store is down #800

Description

@taitelee

Area: ingest · dedupe — follow-up decided while reviewing #775

Expected: while a tenant's dedupe store is unhealthy (the DynamoDB table not answering or not yet past its check, the Pebble instance failed to open), ingest keeps accepting events: the ones that could not be deduped are put on NATS to be deduped and handled once the store is healthy again, in strict order, so a client never sees a 503 for a backend whose only job is dedupe.

Actual: ingest with dedupe.enabled on fails closed per request while the store is unavailable — 503 with Retry-After on dedupe.ErrUnavailable — until the table check passes or the store answers again. #775 deliberately leaves the dedupe stores out of /readyz, since a store that only dedupes should not take the whole process out of rotation, so the per-request 503 is the only behavior left for a dedupe outage.

Impact: a dedupe outage is an ingest outage for every tenant with dedupe on, for as long as it lasts, even though the events could be accepted now and deduped later.

Note: strict ordering is the constraint. The parked events must be deduped and committed in the order they arrived, relative to each other and to the events that keep arriving once the store is back; otherwise a retransmission that lands after the recovery could be committed before its original.

Related: #775.

Activity

  1. added
    enhancementNew feature or request
    area/ingestIngest pipeline (Bento, batching, DLQ)
    area/dedupeDeduplication (Pebble, ScyllaDB)
    on Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/dedupeDeduplication (Pebble, ScyllaDB)area/ingestIngest pipeline (Bento, batching, DLQ)enhancementNew feature or request

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions