diff --git a/packages/cli/src/databases/repositories/execution.repository.ts b/packages/cli/src/databases/repositories/execution.repository.ts index 4e9977c404..94a1a520e1 100644 --- a/packages/cli/src/databases/repositories/execution.repository.ts +++ b/packages/cli/src/databases/repositories/execution.repository.ts @@ -43,6 +43,8 @@ import { ExecutionDataRepository } from './executionData.repository'; import { Logger } from '@/Logger'; import type { ExecutionSummaries } from '@/executions/execution.types'; import { PostgresLiveRowsRetrievalError } from '@/errors/postgres-live-rows-retrieval.error'; +import { separate } from '@/utils'; +import { ErrorReporterProxy as ErrorReporter } from 'n8n-workflow'; export interface IGetExecutionsQueryFilter { id?: FindOperator | string; @@ -156,7 +158,9 @@ export class ExecutionRepository extends Repository { const executions = await this.find(queryParams); if (options?.includeData && options?.unflattenData) { - return executions.map((execution) => { + const [valid, invalid] = separate(executions, (e) => e.executionData !== null); + this.reportInvalidExecutions(invalid); + return valid.map((execution) => { const { executionData, metadata, ...rest } = execution; return { ...rest, @@ -166,7 +170,9 @@ export class ExecutionRepository extends Repository { } as IExecutionResponse; }); } else if (options?.includeData) { - return executions.map((execution) => { + const [valid, invalid] = separate(executions, (e) => e.executionData !== null); + this.reportInvalidExecutions(invalid); + return valid.map((execution) => { const { executionData, metadata, ...rest } = execution; return { ...rest, @@ -183,6 +189,16 @@ export class ExecutionRepository extends Repository { }); } + reportInvalidExecutions(executions: ExecutionEntity[]) { + if (executions.length === 0) return; + + ErrorReporter.error( + new ApplicationError('Found executions without executionData', { + extra: { executionIds: executions.map(({ id }) => id) }, + }), + ); + } + async findSingleExecution( id: string, options?: {