Class FileOrphanSweepTask

java.lang.Object
io.leandev.appfuse.file.tx.FileOrphanSweepTask

public class FileOrphanSweepTask extends Object

孤兒檔案對帳 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:模糊項只報告、不自動刪(零誤刪,崩潰窗殘留留待人工或外部工具)。

  • Constructor Details

    • FileOrphanSweepTask

      public FileOrphanSweepTask(FileJournal journal, FileStorage storage, FileReferenceResolver resolver, Duration grace)
      Parameters:
      journal - 當前後端的交易日誌
      storage - 當前後端的儲存(用於 exists / delete)
      resolver - 參照解析器;null 則走策略 A
      grace - 模糊項的寬限期(小於此年齡視為 in-flight、不處理);null 預設 24 小時
  • Method Details