Skip to content

Commit 84853c9

Browse files
committed
refactor(retention): narrow RetentionSetting type and optimize deletion flow
- Replace generic 'number' with explicit RetentionDays union type to prevent accidental misconfiguration - Skip aggressive fs cleanup when deleteTaskById callback successfully removes the directory - This avoids redundant filesystem work and log noise on stubborn paths
1 parent 4f822b5 commit 84853c9

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/utils/task-history-retention.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import type { Dirent } from "fs"
55
import { getStorageBasePath } from "./storage"
66
import { GlobalFileNames } from "../shared/globalFileNames"
77

8+
/**
9+
* Allowed retention day values (as numbers).
10+
*/
11+
export type RetentionDays = 90 | 60 | 30 | 7 | 3
12+
813
/**
914
* Supported values for the retention setting.
1015
* - "never" or 0 disables purging
1116
* - "90" | "60" | "30" | "7" | "3" (string) or 90 | 60 | 30 | 7 | 3 (number) specify days
1217
*/
13-
export type RetentionSetting = "never" | "90" | "60" | "30" | "7" | "3" | 90 | 60 | 30 | 7 | 3 | 0 | "0" | number
18+
export type RetentionSetting = "never" | "0" | `${RetentionDays}` | RetentionDays | 0
1419

1520
export type PurgeResult = {
1621
purgedCount: number
@@ -213,20 +218,26 @@ export async function purgeOldTasks(
213218

214219
// Attempt deletion using provider callback (for full cleanup) or direct rm
215220
let deletionError: unknown | null = null
221+
let deleted = false
216222
try {
217223
if (deleteTaskById) {
218224
logv(`[Retention] Deleting task ${d.name} via provider @ ${taskDir} (${reason})`)
219225
await deleteTaskById(d.name, taskDir)
226+
// Provider callback handles full cleanup; check if directory is gone
227+
deleted = !(await pathExists(taskDir))
220228
} else {
221229
logv(`[Retention] Deleting task ${d.name} via fs.rm @ ${taskDir} (${reason})`)
222230
await fs.rm(taskDir, { recursive: true, force: true })
231+
deleted = !(await pathExists(taskDir))
223232
}
224233
} catch (e) {
225234
deletionError = e
226235
}
227236

228-
// Verify deletion; if still exists, attempt aggressive cleanup with retries
229-
let deleted = await removeDirAggressive(taskDir)
237+
// If directory still exists after initial attempt, try aggressive cleanup with retries
238+
if (!deleted) {
239+
deleted = await removeDirAggressive(taskDir)
240+
}
230241

231242
if (!deleted) {
232243
// Did not actually remove; report the most relevant error

0 commit comments

Comments
 (0)