From f8664e09c5922c6d802782282631e1ef790d2d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Desboeufs?= <jerome@livingdata.co> Date: Mon, 9 Dec 2024 11:11:30 +0100 Subject: [PATCH] Ensure outputFile is cleaned on processing reset --- batch/model/project.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/batch/model/project.js b/batch/model/project.js index b4a0919..5bb669b 100644 --- a/batch/model/project.js +++ b/batch/model/project.js @@ -159,6 +159,21 @@ export async function setOutputFile(id, filename, inputStream, {redis, storage}) .exec() } +export async function deleteOutputFile(id, {redis, storage}) { + const objectKey = await redis.get(`project:${id}:output-obj-key`) + + if (objectKey) { + storage.deleteFile(objectKey).catch(error => { + logger.error(`Unable to delete object ${objectKey} from storage: ${error.message}`) + }) + } + + await redis.pipeline() + .hdel(`project:${id}:meta`, 'outputFile') + .del(`project:${id}:output-obj-key`) + .exec() +} + export async function getOutputFileDownloadStream(id, {redis, storage}) { const objectKey = await redis.get(`project:${id}:output-obj-key`) return storage.createDownloadStream(objectKey) @@ -212,9 +227,11 @@ export async function updateProcessing(id, changes, {redis}) { await redis.hset(`project:${id}:processing`, prepareObject({...changes, heartbeat: new Date()})) } -export async function resetProcessing(id, {redis}) { +export async function resetProcessing(id, {redis, storage}) { await ensureProjectStatus(id, ['processing', 'waiting'], {redis}) + await deleteOutputFile(id, {redis, storage}) + await redis .pipeline() .del(`project:${id}:processing-asked`) -- GitLab