From 8269d4d960940acae2f4b37f6f4ec872bab50d96 Mon Sep 17 00:00:00 2001 From: Piyush Date: Tue, 29 Sep 2026 09:05:38 +0000 Subject: [PATCH] bulk deletion fixed and works properly without any error message --- apps/files/src/actions/deleteAction.ts | 39 +++++++++++++++----------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/apps/files/src/actions/deleteAction.ts b/apps/files/src/actions/deleteAction.ts index 64e487a8916a4..a50f6556aac06 100644 --- a/apps/files/src/actions/deleteAction.ts +++ b/apps/files/src/actions/deleteAction.ts @@ -18,6 +18,19 @@ const queue = new PQueue({ concurrency: 5 }) export const ACTION_DELETE = 'delete' +/** + * Delete a node, retrying once since concurrent batch deletes can trigger transient server-side locks/timeouts. + * + * @param node - the node to delete + */ +async function deleteNodeWithRetry(node: Parameters[0]) { + try { + await deleteNode(node) + } catch { + await deleteNode(node) + } +} + export const action = new FileAction({ id: ACTION_DELETE, displayName, @@ -88,22 +101,16 @@ export const action = new FileAction({ return Promise.all(nodes.map(() => null)) } - // Map each node to a promise that resolves with the result of exec(node) - const promises = nodes.map(node => { - // Create a promise that resolves with the result of exec(node) - const promise = new Promise(resolve => { - queue.add(async () => { - try { - await deleteNode(node) - resolve(true) - } catch (error) { - logger.error('Error while deleting a file', { error, source: node.source, node }) - resolve(false) - } - }) - }) - return promise - }) + // queue.add already returns a promise resolving with the task's result + const promises = nodes.map((node) => queue.add(async (): Promise => { + try { + await deleteNodeWithRetry(node) + return true + } catch (error) { + logger.error('Error while deleting a file', { error, source: node.source, node }) + return false + } + })) return Promise.all(promises) },