feat(scheduler): add snapshot-seed CLI and 10m seed deferral
Add `python app.py snapshot-seed [--date]` (offline clone, Debian / docker compose exec friendly). When seed fires while full-site snapshot is running, or last_completed is missing (no_source), record skip as non-success and retry in 10 minutes until a real seed succeeds; fans and quiet-window rules unchanged.
This commit is contained in:
1 parent
9969e65202
commit
bb18d232f6
7 files changed
+374
-8
No files matched your search
@@ -51,6 +51,7 @@ class SnapshotSummary:
|
||||
completed: bool = False
|
||||
already_completed: bool = False
|
||||
finished_at: int = 0
|
||||
reason: str | None = None
|
||||
errors: list[str] = field(default_factory=list)
|
||||
|
||||
def as_dict(self) -> dict[str, Any]:
|
||||
@@ -73,6 +74,7 @@ class SnapshotSummary:
|
||||
"backup_error": self.backup_error,
|
||||
"completed": self.completed,
|
||||
"already_completed": self.already_completed,
|
||||
"reason": self.reason,
|
||||
"errors": self.errors,
|
||||
}
|
||||
|
||||
@@ -543,7 +545,8 @@ class SnapshotService:
|
||||
stat_date=stat_date, reason="no_source", source=source,
|
||||
)
|
||||
summary.finished_at = self._now()
|
||||
summary.completed = True
|
||||
summary.completed = False
|
||||
summary.reason = "no_source"
|
||||
return summary
|
||||
if self.repo.kv_get(self.completed_key(stat_date)) == "1":
|
||||
self._log(
|
||||
@@ -553,6 +556,7 @@ class SnapshotService:
|
||||
summary.finished_at = self._now()
|
||||
summary.completed = True
|
||||
summary.already_completed = True
|
||||
summary.reason = "already_completed"
|
||||
return summary
|
||||
if self.repo.kv_get(self.seeded_key(stat_date)) == "1":
|
||||
self._log(
|
||||
@@ -562,6 +566,7 @@ class SnapshotService:
|
||||
summary.finished_at = self._now()
|
||||
summary.completed = True
|
||||
summary.already_completed = True
|
||||
summary.reason = "already_seeded"
|
||||
return summary
|
||||
|
||||
copied = self.repo.copy_ok_snapshots(
|
||||
@@ -583,6 +588,7 @@ class SnapshotService:
|
||||
self.repo.bump_cache_version("fans")
|
||||
summary.finished_at = self._now()
|
||||
summary.completed = True # seed 任务本身成功;不等于快照落盘完成
|
||||
summary.reason = "seeded"
|
||||
self._log(
|
||||
"info", "snapshot.seed_done",
|
||||
stat_date=stat_date, source=source,
|
||||
|
||||
Reference in new issue
Block a user