Бэкапы: БД без таблиц не становится снимком, первый бэкап ждёт приложение
guard_empty считал неизвестные счётчики («?» — нет таблиц users/matches) непустыми, и снимок без данных уходил в оба репозитория и становился latest — restore latest в сценарии «Pi умер» падал на verify_staging. Теперь это отказ, как для пустой БД (обход — --allow-empty). entrypoint перед самым первым бэкапом ждёт /api/health приложения (до BACKUP_APP_WAIT_SECONDS, 600 с): оно отвечает только после миграций. Не дождались — пробуем всё равно, guard не пропустит БД без таблиц. README, раздел 9: новые строки журнала, снимки с «?» больше не создаются. #74 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
@@ -178,6 +178,17 @@ forget_repo() {
|
||||
# Защита истории от пустых данных: новый Pi до восстановления или случайно очищенная БД не
|
||||
# должны становиться «последним снимком» (restore latest вернул бы пустоту).
|
||||
guard_empty() { # guard_empty <игроков> <партий>
|
||||
# «?» — счётчики не прочитались: в БД нет таблиц (миграции ещё не прошли). Такой снимок
|
||||
# стал бы latest и сломал бы restore latest (#74) — отказ, как и для пустой БД.
|
||||
case "$1$2" in
|
||||
*'?'*)
|
||||
for _r in $(repos); do mark "run-$_r" err "в БД нет таблиц users/matches — бэкап не сделан"; done
|
||||
log "Не удалось прочитать число игроков и партий: в БД нет таблиц users/matches."
|
||||
log "Похоже, приложение ещё не применило миграции. Бэкап НЕ сделан, чтобы снимок без данных"
|
||||
log "не стал последним. Дождитесь запуска приложения; если так и задумано:"
|
||||
die "fs-backup run --allow-empty"
|
||||
;;
|
||||
esac
|
||||
if [ "$1" != 0 ] || [ "$2" != 0 ]; then return 0; fi
|
||||
for _repo in $(repos); do
|
||||
_prev="$(r "$_repo" snapshots latest --host "$SNAP_HOST" --json 2>/dev/null | jq -r \
|
||||
|
||||
Reference in New Issue
Block a user