Skip to content

Wire restic (remote) fetch into the rejoin restore action #1590

Description

@svaroqui

Summary

The rejoin restore selector + backup catalog can already select a backup from any node / repo / location (local, restic S3/SFTP), and the new catalog-based rejoin states (IsValidRejoinBackupLogical/Physical, WARN0190/0191) correctly report "a backup exists anywhere" — including restic-only backups. But the rejoin action is still local-only, so a remote/restic-only backup is listed and rankable yet never actually fetched/restored.

Where

JobFlashbackLogicalBackup only acts on the selector pick when pick.isLocal() (cluster/srv_job_backup.go, around the pick != nil && pick.isLocal() gate) and otherwise falls back to a legacy local on-disk lookup. Remote (restic) picks are dropped.

Why it matters

Today this is fine because repman's default keeps a local copy: local backup on the repman node + restic snapshot = a double copy (local for fast restore, restic for history/retention). So after a failover the old master still has a local backup and the local-only rejoin works.

But for the restic-S3-only mode (drop the local copy to save NVMe on cloud18), after a failover the only backup anywhere is remote — so the rejoin must fetch from restic, otherwise rejoin-from-backup is impossible in that mode. Most clients keep local backups, so there's time to wire this — but it must land before the S3-only mode ships.

TODO

  • Wire restic/remote fetch into the rejoin restore path so a pick with Location = remote (restic S3/SFTP) is fetched (or FUSE-mounted) and restored, not just listed. Drop the isLocal() gate once remote fetch exists.
  • Enumerate all restic snapshots in buildBackupCatalog() — it currently emits one row per server per kind (the last backup), not the full restic history the S3-only / PITR-depth cases need.
  • Classify Location by actual backend (local restic repo vs S3/SFTP vs S3-FUSE-mount) so the Order:["last","local"] "local" preference means physically fast, not "is a plain file" — a FUSE-mounted S3 backup looks local but is remote; a local restic repo is restic but fast.

Context

Catalog-based rejoin availability landed in commit 0399a5bb7 on branch feature/arbitration-server-authoritative-heartbeat (per-method selectors autorejoin-backup-selector-{logical,physical}, IsValidRejoinBackup{Logical,Physical}, RejoinMethodsStatus() gated on the catalog).

Metadata

Metadata

Assignees

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions