From e31245b4927aaca14440d6180268fa7c6790c78e Mon Sep 17 00:00:00 2001 From: charles-gauthereau Date: Wed, 24 Jun 2026 08:32:40 +0200 Subject: [PATCH] fix: clean up failed and ongoing backups --- app/api/agent/[agentId]/backup/route.ts | 1 - src/lib/tasks/cleaning/index.ts | 21 ++++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/api/agent/[agentId]/backup/route.ts b/app/api/agent/[agentId]/backup/route.ts index ba5b9f88..945832b7 100644 --- a/app/api/agent/[agentId]/backup/route.ts +++ b/app/api/agent/[agentId]/backup/route.ts @@ -108,7 +108,6 @@ export const PATCH = withAgentCheck(async (request: Request, {params, agent}: { }) => { try { const body: BodyPatch = await request.json(); - log.info({data: body}, "Body from PATH in backup route"); const status = body.status const backupId = body.backupId diff --git a/src/lib/tasks/cleaning/index.ts b/src/lib/tasks/cleaning/index.ts index c584d018..58353a05 100644 --- a/src/lib/tasks/cleaning/index.ts +++ b/src/lib/tasks/cleaning/index.ts @@ -8,21 +8,36 @@ const log = logger.child({module: "tasks/cleaning"}); export const backupCleanTask = async () => { try { - const backups = await db.query.backup.findMany({ + const ongoingBackups = await db.query.backup.findMany({ where: and( isNotNull(drizzleDb.schemas.backup.deletedAt), eq(drizzleDb.schemas.backup.status, "ongoing") ) }); - log.debug(`Backups to clean: ${backups.length}`); + log.debug(`Backups to clean: ${ongoingBackups.length}`); - for (const backup of backups) { + for (const backup of ongoingBackups) { await db.update(drizzleDb.schemas.backup).set(withUpdatedAt({ status: "failed", })) .where(eq(drizzleDb.schemas.backup.id, backup.id)); } + const failedBackups = await db.query.backup.findMany({ + where: and( + isNull(drizzleDb.schemas.backup.deletedAt), + eq(drizzleDb.schemas.backup.status, "failed") + ) + }); + log.debug(`Failed backups to clean: ${failedBackups.length}`); + + for (const backup of failedBackups) { + await db.update(drizzleDb.schemas.backup).set(withUpdatedAt({ + deletedAt: new Date(), + })) + .where(eq(drizzleDb.schemas.backup.id, backup.id)); + } + } catch (e: any) { log.error({name: "backupCleanTask", error: e},`Backup cleanup failed`); throw e;