Skip to content

HA: no alert or handling when every node has quarantined the same database (no resync source left) #9553

Closed

Description

@robfrank

Follow-up of #9547 (split out of that issue's second "Expected" point).

In the #9547 soak, a file-id collision made ArcadeStateMachine.handleUnexpectedApplyError quarantine database chaos on all three nodes within the same second. Each quarantine triggers a targeted snapshot resync from the leader and hands leadership off, but when every node is quarantined there is no healthy copy to resync from: node 1 answered HTTP 503 "being replaced from the leader's snapshot", and the leader answered HTTP 404 "Database 'chaos' is not available" because it was quarantined too.

The fix for #9547 removes the cause seen in that run (a stale proposer's schema entry reaching the log). It does not handle the general state "every voter has quarantined the same database", whatever the cause.

Expected

Entry point: ArcadeStateMachine.handleUnexpectedApplyError -> quarantineDatabase / triggerDatabaseResync, plus ClusterAlerts.

Activity

  1. added this to the 26.11.1 milestone on Oct 9, 2026
  2. added
    enhancementNew feature or request
    haHigh availability / replication (Raft)
    on Oct 9, 2026
  3. self-assigned this
    on Oct 9, 2026
  4. added a commit that references this issue on Oct 9, 2026
  5. robfrank commented on Oct 9, 2026

    @robfrank
    CollaboratorAuthor

    Implemented by #9567. Each node now reports the databases it holds quarantined in the capability poll it already runs against every peer, so any node can tell when every voter holds the same database quarantined. GET /api/v1/cluster then raises a critical alert, no-healthy-copy-on-any-voter, that names the way out: accept one copy, make that node leader, or restore from a backup. The accept-diverged override from #9449 used to refuse any node that was not the sole voter, so it is now also allowed when every voter reports the database quarantined; before lifting, the node asks every other voter live whether it serves the database and refuses if one does or cannot be asked. A resync is no longer retried from a leader that holds the same database quarantined. A peer that is unknown, stale or on an older build is never counted as quarantined, so a down node keeps the alert off.

    Still open:


    ❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.

  6. removed
    in progressThe team is actively working on this issue
    on Oct 9, 2026
  7. added a commit that references this issue on Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requesthaHigh availability / replication (Raft)severity:minorCosmetic, documentation, edge case, or a workaround exists

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions