Class FileOrphanSweepTask
java.lang.Object
io.leandev.appfuse.file.tx.FileOrphanSweepTask
孤兒檔案對帳 sweep(後端無關)
讀取 FileJournal 並與實體儲存對帳,清除 TransactionAwareFileStorage 的交易補償在崩潰窗
未能處理的殘留。本任務只依賴 FileJournal + FileStorage(皆為後端相關、由呼叫端注入),
故同一份邏輯適用所有非交易後端。
對帳規則(依每個 fileId 的「最後事件狀態」)
| 最後狀態 | 含義 | 處置 |
|---|---|---|
CONFIRMED / DELETED |
健康(已 commit 的存在 / 已完成的刪除) | 略過 |
ROLLED_BACK 但實體檔案仍在 |
補償刪除失敗 → 可證明孤兒 | 刪除(策略 A 即安全) |
CREATED 久未收尾(過 grace) |
模糊:可能 commit 後崩潰、也可能 rollback | 策略 A 報告 / 策略 B 解析 |
DELETE_PENDING 久未收尾(過 grace) |
模糊:delete 的 tx 是否 commit 不明 | 策略 A 報告 / 策略 B 解析 |
策略 A / B
提供 FileReferenceResolver 即策略 B:模糊項查「是否仍被參照」,未參照才刪。
未提供則策略 A:模糊項只報告、不自動刪(零誤刪,崩潰窗殘留留待人工或外部工具)。
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final record模糊項紀錄(策略 A 報告用)static final classSweep 結果摘要 -
Constructor Summary
ConstructorsConstructorDescriptionFileOrphanSweepTask(FileJournal journal, FileStorage storage, FileReferenceResolver resolver, Duration grace) -
Method Summary
-
Constructor Details
-
FileOrphanSweepTask
public FileOrphanSweepTask(FileJournal journal, FileStorage storage, FileReferenceResolver resolver, Duration grace) - Parameters:
journal- 當前後端的交易日誌storage- 當前後端的儲存(用於 exists / delete)resolver- 參照解析器;null 則走策略 Agrace- 模糊項的寬限期(小於此年齡視為 in-flight、不處理);null 預設 24 小時
-
-
Method Details
-
run
對所有 partition 執行對帳
-