Skip to content

Verify a WAL catch-up after the Wedding backup cutover #3778

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

The Wedding backup mirror (platform#3776) proves the dedicated bucket holds the shared catalogue at the moment it runs. The shared archive keeps receiving WAL until the Cluster's archive reference changes, so any segment archived between the last CONVERGED run and that change exists only in the old bucket. Codex raised this on platform#3776, and it holds: the mirror cannot quiesce archiving, and it refuses to run once the Cluster has switched.

A post-switch pass is not possible with today's evaluator either. After the switch the Cluster writes new WAL and base backups straight into the dedicated bucket. Those objects were never in the source listing, so the evaluator refuses them as unexpected destination objects.

Audience and problem

Wedding guests and the operator. Without a catch-up, the dedicated catalogue can carry a WAL gap right at the cutover. That breaks point-in-time recovery across the switch, which is exactly the window in which a restore is most likely to be needed.

Hypothesis

A catch-up mode that runs after the reference change, copies the source (which is now quiescent) once more, and accepts only destination objects that are either copied source objects or written by the Cluster after the switch, closes the gap with evidence.

Acceptance criteria

  • A mode that runs only when the Cluster archives through wedding-db-dedicated, copies the shared catalogue again, and proves every source object is present with a matching size and checksum.
  • Destination objects that are not in the source are accepted only when they were written after the recorded switch time. Anything older is still refused.
  • The WAL sequence across the switch is continuous: the newest source segment and the oldest post-switch segment leave no gap.
  • RED/GREEN tests cover a segment archived just before the switch that is missing, a stale destination object, and a gap in WAL continuity.
  • Seed the dedicated wedding backup credential and repoint the ExternalSecret and ObjectStore #3252's cutover steps name this pass as mandatory after the reference change.

Rough size: M. Blocks treating #3252's cutover as complete.

Activity

  1. moved this to 📥 Backlog in 🌊 Project Boardon Sep 13, 2026
  2. self-assigned this
    on Sep 14, 2026
  3. moved this from 📥 Backlog to 🏃🏻‍♂️ In Progress in 🌊 Project Boardon Sep 14, 2026
  4. added a commit that references this issue on Sep 14, 2026
  5. moved this from 🏃🏻‍♂️ In Progress to 👀 In Review in 🌊 Project Boardon Sep 14, 2026
  6. moved this from 👀 In Review to 🚀 Ready to Merge in 🌊 Project Boardon Sep 14, 2026
  7. moved this from 🚀 Ready to Merge to ✅ Done in 🌊 Project Boardon Sep 14, 2026
  8. moved this from ✅ Done to 📊 Verifying in 🌊 Project Boardon Sep 14, 2026
  9. devantler commented on Sep 14, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Shipped in #3798, now in 📊 Verifying

    #3798 merged at 08:02:46Z at its evaluated head c8d6844, with merge commit 95de29e4. The merge-queue CI run succeeded, 🚀 Deploy to Prod passed, and 🩹 Heal Prod was skipped.

    What is now in place.

    • The Mirror Wedding Backup Catalogue workflow has a catch-up mode that takes the recorded switch time.
    • That mode runs only after the Cluster archives through wedding-db-dedicated, and works within the Cluster's server directory.
    • It refuses when any of these hold:
      • a shared object is missing from, or differs in, the dedicated bucket;
      • the shared catalogue changed during the pass;
      • an object in the dedicated bucket predates the switch, or sits outside the server directory or its log directory;
      • there is a gap in WAL continuity across the switch.
    • The DR docs now make this pass a mandatory step of the cutover.

    What still has to happen before this is Done. This change can only be proven for real during the Wedding cutover (#3768), which has not happened yet:

    • After the archive reference changes, dispatch the workflow in catch-up mode with the switch time.
    • Record the verdict here.
    • CAUGHT UP closes the acceptance criteria against live data. A refusal is a finding to fix before the cutover counts as complete.
  10. devantler commented on Oct 11, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Verification read 2026-10-11 — the live proof is in, card moved to Done.

    The step this card was waiting for has happened. The Wedding cutover (#3768) merged on 2026-10-01, and the catch-up pass was run on main right after it: run 36832028928 (Mirror Wedding Backup Catalogue, started 07:43:56Z, concluded success). As recorded on #3768, it found the fresh base backup in the dedicated archive, proved the next WAL segment after the shared archive, and confirmed the shared catalogue had not grown after the switch. I re-read only the run conclusion today, not its log. The remaining cutover work (isolated restore, access denial, retirement) is tracked on #3769, #3253 and #3252.

  11. moved this from 📊 Verifying to ✅ Done in 🌊 Project Boardon Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Fields

No fields configured for Security.

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions