Skip to content

復元前バックアップが同じ秒の既存の世代と重なると、その世代を作り直す(復元元が pre-restore-* なら展開の前に置き換わる) #473

Closed

Description

@takemi-ohama

何を見つけたか

復元前バックアップの名前は pre-restore-<時刻>(秒まで)である。同じ秒に同名の世代が既にあると、_backup_before_restore → _create_full が #458 で入った「世代の作り直し」の経路を通り、その世代を今のボリュームの全体で作り直す(設計 F3 のとおり)。

  • 復元する世代そのものが、ちょうどその秒の名前を持つ pre-restore-* だったとき、復元元が展開の前に今のボリュームの中身へ置き換わる
  • 同じ秒に復元を 2 回打つと、1 回目の復元前バックアップ(1 回目の復元の前の状態)が 2 回目の前の状態で上書きされる

どこで見つけたか

lib/devbase/snapshot/manager.py の _backup_before_restore(スプリント m8b の main で 599 行付近)。スプリント PR #472 の cross-review(codex、major / データ保全)。

なぜこの変更の範囲外なのか

#458 の承認済みの設計は F3(同じ秒に重なった復元前バックアップを、作り直しとして作る)を決めており、テストもその振る舞いを縛っている。変えるには設計の決定を変えることになるため、承認ゲート 2 で利用者が「設計どおり残し、起票」と決めた(2026-10-13、#472 のコメント)。根拠: Value 2(MVV 版 1)

直さないと何が起きるか

人の操作では、作ったその秒のうちに復元を打つことはほぼ無く、起きる見込みは小さい。スクリプトから復元を続けて打つと、復元前バックアップが 1 つ失われ得る。

案

既存の世代と重なったら、末尾に通し番号を付けた別の名前(pre-restore-<時刻>-2 など)で作り、既存の世代を作り直さない。設計 F3 と確定仕様(docs/specifications/snapshot-series.md)を合わせて直す。

由来

issue #458(PR #472)

受け入れ条件

2026-10-13 スプリント m8c(04)で着手。設計 PR は作らず、課題の「案」で進める(設計 F3 を変え、確定仕様を同じ実装 PR で直す)。

  • 1. 復元前バックアップの名前 pre-restore-<時刻> が既にある世代と重なったら、既存の世代を作り直さず、末尾に通し番号を付けた名前(pre-restore-<時刻>-2、それも重なれば -3 …)で新しい世代を作る。既存の世代のファイル(full.tar.zst・snapshot.snar・incr-*.tar.zst・meta.yml)と snapshot.yml のエントリは 1 バイトも変わらない
  • 2. 復元する世代がちょうど同じ秒の pre-restore-<時刻> であっても、展開するのは復元を打つ前のその世代の中身である(今のボリュームの中身で置き換わらない)
  • 3. 同じ秒に復元を 2 回打つと、復元前バックアップが 2 つ残る(1 回目の前の状態と 2 回目の前の状態)
  • 4. 重ならないときの名前・作り方・失敗の扱い(警告を出し、その呼び出しで作ったディレクトリだけを消して控え無しで続ける)は今と同じ
  • 5. 通し番号を付けた名前は名前の形の検証(_safe_snap_dir)を通り、系列・保持の規則(pre-restore-* の扱い)で他の pre-restore-* と同じに扱われる
  • 6. 既存のテスト test_pre_restore_backup_rebuilds_an_existing_generation(F3 を縛るもの)を新しい振る舞いへ書き換え、1〜3 をテストで縛る。書き換えたテストは、実装を前の形に戻すと落ちることを確かめる
  • 7. docs/specifications/snapshot-series.md の「世代の作り直し」の場面の表から復元前バックアップの行を外し、用語の表の「復元前バックアップ」に重なったときの名前の規則を書く。CHANGELOG.md の [Unreleased] に書く

進行

モード: —

  • 要求と受け入れ条件
  • 作業場所の用意 — 2026-10-13 02:27
  • 設計
  • 素材の収集と出典の確定
  • ドキュメント再構成
  • ドキュメントレビュー
  • 計画 — 2026-10-13 02:26
  • 実装 — 2026-10-13 02:55
  • 構造改善 — 2026-10-13 03:07
  • 実装レビュー — 2026-10-13 03:25
  • 完了判定 — 2026-10-13 03:01
  • Pull Request — 2026-10-13 03:03
  • 確定仕様化 — 2026-10-13 04:02
  • 後片付け
  • 配布 — 2026-10-13 04:12
  • 体裁レビュー
  • リリース後テスト — 2026-10-13 04:12
  • 振り返り — 2026-10-13 04:26
  • 棚卸し — 2026-10-13 04:30

振り返り: #481 (comment)

Activity

  1. added 2 commits that reference this issue on Oct 12, 2026
  2. added a commit that references this issue on Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions