feat(restore): 恢复前默认为当前世界做安全快照并串接恢复 Job,快照失败则不恢复;并发恢复另一备份返回 409

This commit is contained in:
Lemon-miaow committed 2026-09-25 02:52:18 +08:00
1 parent d44243c0ac
commit 489eff4494
33 files changed
+1260 -105

No files matched your search

+13 -2
View File
@@ -187,13 +187,24 @@ func TestManualBackupRationing(t *testing.T) {
insert(sole, "inactive_15d", now.Add(-100*reaper.Day), false, 1000)
insert(copied, "inactive_15d", now.Add(-50*reaper.Day), true, 100)
excess, err := st.ExcessManualBackups(ctx, name, 5)
excess, err := st.ExcessBackups(ctx, name, "manual", 5, "")
if err != nil {
t.Fatalf("ExcessManualBackups: %v", err)
t.Fatalf("ExcessBackups: %v", err)
}
if len(excess) != 2 || excess[0].ID != manual[0] || excess[1].ID != manual[1] {
t.Fatalf("excess = %+v; want the two oldest manual backups, oldest first", excess)
}
// The backup a chained restore will extract is never pruned.
excess, err = st.ExcessBackups(ctx, name, "manual", 5, manual[0])
if err != nil {
t.Fatalf("ExcessBackups(protect): %v", err)
}
if len(excess) != 1 || excess[0].ID != manual[1] {
t.Fatalf("excess with %s protected = %+v; want only %s", manual[0], excess, manual[1])
}
if excess, err = st.ExcessBackups(ctx, name, "pre_restore", 0, ""); err != nil || len(excess) != 0 {
t.Fatalf("pre_restore excess = %+v, %v; the manual ones are not its to prune", excess, err)
}
all, err := st.EvictableBackups(ctx)
if err != nil {