nats-io/nats-server · error

Unsafe quorum rescue expired, quorum restored to %d

Error message

Unsafe quorum rescue expired, quorum restored to %d

What it means

The RescueQuorum timer fired (or recalc ended the rescue): the artificially lowered quorum is discarded and the natural quorum (from current cluster size) is restored. Guarded by n.rescue == t so only the live rescue expires; a stale timer is ignored.

Source

Thrown at server/raft.go:1378

	n.qn = qn
	n.warn("Unsafe quorum rescue applied, quorum lowered %d -> %d for %v", prev, qn, rescueQuorumTimeout)

	// Make sure an election can happen soon.
	n.resetElect(randCampaignTimeout())
	return prev, qn, nil
}

// expireRescueLocked runs when the rescue timeout fires and restores the natural quorum.
// Lock should be held.
func (n *raft) expireRescueLocked(t *time.Timer) {
	if n.State() == Closed || n.rescue != t {
		return
	}
	// Must clear the timer first, recalcQuorum keeps the rescued quorum
	// while it sees an active rescue.
	n.rescue = nil
	n.recalcQuorum()
	n.warn("Unsafe quorum rescue expired, quorum restored to %d", n.qn)
}

// PauseApply will allow us to pause processing of append entries onto our
// external apply queue. In effect this means that the upper layer will no longer
// receive any new entries from the Raft group.
func (n *raft) PauseApply() error {
	if n.State() == Leader {
		return errAlreadyLeader
	}
	n.Lock()
	defer n.Unlock()
	n.pauseApplyLocked()
	return nil
}

func (n *raft) pauseApplyLocked() {
	// If we are currently not a follower, make sure we step down.
	if n.State() != Follower {

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Ensure enough peers are back or the cluster may lose quorum again
  2. Re-run rescue only if still degraded and data-loss risk is accepted
  3. Investigate why peers remained down for the full rescue window
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at server/raft.go:1378 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02). Data as JSON: /api/errors/70fc8aeadeee8c93. Report an issue: GitHub.