diff --git a/packages/cli/src/WorkflowExecuteAdditionalData.ts b/packages/cli/src/WorkflowExecuteAdditionalData.ts index b55d8a039f..2ad83109fc 100644 --- a/packages/cli/src/WorkflowExecuteAdditionalData.ts +++ b/packages/cli/src/WorkflowExecuteAdditionalData.ts @@ -578,7 +578,7 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks { if (isManualMode && !saveManualExecutions && !fullRunData.waitTill) { // Data is always saved, so we remove from database - await Container.get(ExecutionRepository).deleteExecution(this.executionId); + await Container.get(ExecutionRepository).deleteExecution(this.executionId, true); return; } diff --git a/packages/cli/src/databases/repositories/execution.repository.ts b/packages/cli/src/databases/repositories/execution.repository.ts index 5db7130aca..07215d4701 100644 --- a/packages/cli/src/databases/repositories/execution.repository.ts +++ b/packages/cli/src/databases/repositories/execution.repository.ts @@ -66,11 +66,11 @@ function parseFiltersToQueryBuilder( @Service() export class ExecutionRepository extends Repository { - private executionDataRepository: ExecutionDataRepository; - - constructor(dataSource: DataSource, executionDataRepository: ExecutionDataRepository) { + constructor( + dataSource: DataSource, + private readonly executionDataRepository: ExecutionDataRepository, + ) { super(ExecutionEntity, dataSource.manager); - this.executionDataRepository = executionDataRepository; } async findMultipleExecutions( @@ -238,9 +238,13 @@ export class ExecutionRepository extends Repository { } } - async deleteExecution(executionId: string) { - // TODO: Should this be awaited? Should we add a catch in case it fails? - await BinaryDataManager.getInstance().deleteBinaryDataByExecutionIds([executionId]); + async deleteExecution(executionId: string, deferBinaryDataDeletion = false) { + const binaryDataManager = BinaryDataManager.getInstance(); + if (deferBinaryDataDeletion) { + await binaryDataManager.markDataForDeletionByExecutionId(executionId); + } else { + await binaryDataManager.deleteBinaryDataByExecutionIds([executionId]); + } return this.delete({ id: executionId }); }