Files
kevinveenbirkenbachandClaude Opus 5 cab5e2523f fix(svc-bkp-volume-2-local): fail the drill on a database that was never dumped
The payload check accepted a files/ tree OR an sql dump, so a database whose dump never happened and which was copied as raw engine files passed it. That is exactly what occurred: Discourse's postgres landed as PG_VERSION/base/pg_wal and the drill reported green, while restoring that replays a torn cluster rather than a dump.

The generation's manifest is now the authority on which volumes held a database and which of those carry a dump; generations written before baudolo recorded that are judged by the engine's on-disk footprint instead. Demonstrated against both: the manifest branch catches a volume the footprint heuristic cannot see, and leaves a non-database volume alone.

seed/marker.py reads dumps and therefore needs baudolo, but ran under a bare python3, which Ansible's PATH resolves to the sealed project venv while sys-pip-install installs into the system interpreter - so it died at import and the entire restore half of the drill never ran. It now uses BKP_TEST_PYTHON, the interpreter the role installed into.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 03:22:04 +02:00

10 lines
605 B
Bash

ASYNC_ENABLED={{ ASYNC_ENABLED | bool | lower }}
BKP_TEST_BACKUPS_DIR={{ DIR_BACKUPS }}
BKP_TEST_HEALTH_SCRIPT={{ [ DIR_SCRIPTS_SYSTEMCTL, 'sys-ctl-hlth-container', 'script.sh' ] | path_join }}
BKP_TEST_HEALTH_TIMEOUT={{ lookup('timeout', 1200) | int }}
BKP_TEST_IS_STACK_HOST={{ IS_STACK_HOST | bool | lower }}
BKP_TEST_PYTHON={{ ansible_python_interpreter }}
BKP_TEST_REPO_ROOT={{ playbook_dir }}
BKP_TEST_SCRATCH_IMAGE={{ lookup('config', application_id, 'services.test.image') }}:{{ lookup('config', application_id, 'services.test.version') }}
BKP_TEST_SERVICE={{ SYS_SERVICE_BACKUP_VOLUME_2_LOCAL }}