2.1 KiB
2.1 KiB
Restore Simulation (FOR DEVELOPER USE ONLY)
simulate-restore.sh is a developer diagnostic that proves the backup/restore
pair round-trips the live database. It is NOT an operator tool and NOT part of
the shipped feature. It mutates a live database on purpose - never run it
against production or anything you cannot disturb.
Testing cadence
- Before merging any change to
scripts/backup/*.sh,docker-compose.backup.yml, orshopdb/core/api/shopdbbackups.py. - Before cutting a release that touches the backup/restore surface.
- After a schema migration that adds or drops tables (new table archetype).
- Ad hoc when investigating a restore-fidelity concern.
What it does
- Requests a backup through the real
.backup-requestedsentinel. - Fingerprints every base table with
CHECKSUM TABLE(the restore target). - Quiesces the
apiservice, mutates the table archetypes:- core standalone (vendor rename, setting flip)
- consumable ledger (
modelsupplies.quantityonhandbump)
- Requests a restore through the real
.restore-requestedsentinel. - Re-fingerprints and asserts every table returned to backup-time state.
- Writes
simulate-restore-results.txtnext to the script.
Testing parameters
- Stack must be up with the backup profile:
docker compose -f docker-compose.yml -f docker-compose.backup.yml --profile backup up -d - Run from git bash on the host:
bash scripts/backup/simulate-restore.sh - Coverage: all
BASE TABLErows inshopdb_flask(110+ tables), one pass.
Expected drift (NOT failures)
apitokens: the app rewrites token last-used continuously; restore is correct at backup time.- Endpoint-agent tables (
computers,endpointstates,endpointevents,endpointapplications): external fleet agents keep writing after restore and cannot be quiesced from here. - Asset ROW deletion is not permitted in a live/CMMC environment (RESTRICT + compliance). The cascade edge is reported informationally only. A missing or corrupted asset is still fully restored because the dump drops and recreates the table - restore fidelity does not depend on a live delete.