rqlite/rqlite · error

syncing store dir: %w

Error message

syncing store dir: %w

What it means

After executing the reap plan, executeReapPlan calls fsutil.SyncDirMaybe on the snapshot store directory to make deletions/renames durable; the sync failed, wrapped via %w. The reap operations likely succeeded but durability is unconfirmed, so the error is propagated.

Source

Thrown at snapshot/store.go:668

	if err := plan.WriteToFile(p, s.reapPlanPath); err != nil {
		return 0, 0, fmt.Errorf("writing reap plan: %w", err)
	}

	return s.executeReapPlan(p, s.reapPlanPath)
}

// executeReapPlan executes a reap plan and cleans up.
func (s *Store) executeReapPlan(p *plan.Plan, planPath string) (int, int, error) {
	startT := time.Now()
	defer recordDuration(reapExecuteDuration, startT)

	executor := plan.NewExecutor()
	if err := p.Execute(executor); err != nil {
		return 0, 0, fmt.Errorf("executing reap plan: %w", err)
	}

	if err := fsutil.SyncDirMaybe(s.dir); err != nil {
		return 0, 0, fmt.Errorf("syncing store dir: %w", err)
	}

	// Clean up the plan file.
	os.Remove(planPath)
	return p.NReaped, p.NCheckpointed, nil
}

// signalReap sends a non-blocking signal to the reaper goroutine.
func (s *Store) signalReap() {
	select {
	case s.reapCh <- struct{}{}:
	default:
	}
}

// DueNext returns the type of snapshot due next.
func (s *Store) DueNext() (Type, error) {
	if fsutil.FileExists(s.fullNeededPath) {

View on GitHub (pinned to 7586a4d1bd)

Solutions

  1. Check filesystem/disk health for the snapshot store directory
  2. Verify snapshots are intact after the failure; the plan file persistence guards recovery
  3. Retry the operation or restart the node to reconcile state
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at snapshot/store.go:668 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of rqlite/rqlite@7586a4d1bd (2026-09-03). Data as JSON: /api/errors/fc5bb5fb03052534. Report an issue: GitHub.