fix(core): Account for pre-execution failure in scaling mode (#12815)

This commit is contained in:
Iván Ovejero 2025-01-23 17:26:19 +01:00 committed by GitHub
parent 36e615b28f
commit b4d27c49e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 44 additions and 12 deletions

View file

@ -1,6 +1,12 @@
import type { RunningJobSummary } from '@n8n/api-types';
import { Service } from '@n8n/di';
import { InstanceSettings, WorkflowExecute, ErrorReporter, Logger } from 'n8n-core';
import {
WorkflowHasIssuesError,
InstanceSettings,
WorkflowExecute,
ErrorReporter,
Logger,
} from 'n8n-core';
import type {
ExecutionStatus,
IExecuteResponsePromiseData,
@ -178,13 +184,33 @@ export class JobProcessor {
userId: manualData?.userId,
};
workflowRun = this.manualExecutionService.runManually(
data,
workflow,
additionalData,
executionId,
resultData.pinData,
);
try {
workflowRun = this.manualExecutionService.runManually(
data,
workflow,
additionalData,
executionId,
resultData.pinData,
);
} catch (error) {
if (error instanceof WorkflowHasIssuesError) {
// execution did not even start, but we call `workflowExecuteAfter` to notify main
const now = new Date();
const runData: IRun = {
mode: 'manual',
status: 'error',
finished: false,
startedAt: now,
stoppedAt: now,
data: { resultData: { error, runData: {} } },
};
await additionalData.hooks.executeHookFunctions('workflowExecuteAfter', [runData]);
return { success: false };
}
throw error;
}
} else if (execution.data !== undefined) {
workflowExecute = new WorkflowExecute(additionalData, execution.mode, execution.data);
workflowRun = workflowExecute.processRunExecutionData(workflow);

View file

@ -0,0 +1,7 @@
import { WorkflowOperationError } from 'n8n-workflow';
export class WorkflowHasIssuesError extends WorkflowOperationError {
constructor() {
super('The workflow has issues and cannot be executed for that reason. Please fix them first.');
}
}

View file

@ -44,7 +44,6 @@ import type {
} from 'n8n-workflow';
import {
LoggerProxy as Logger,
WorkflowOperationError,
NodeHelpers,
NodeConnectionType,
ApplicationError,
@ -56,6 +55,7 @@ import {
import PCancelable from 'p-cancelable';
import { ErrorReporter } from '@/errors/error-reporter';
import { WorkflowHasIssuesError } from '@/errors/workflow-has-issues.error';
import * as NodeExecuteFunctions from '@/node-execute-functions';
import { ExecuteContext, PollContext } from './node-execution-context';
@ -1246,9 +1246,7 @@ export class WorkflowExecute {
pinDataNodeNames,
});
if (workflowIssues !== null) {
throw new WorkflowOperationError(
'The workflow has issues and cannot be executed for that reason. Please fix them first.',
);
throw new WorkflowHasIssuesError();
}
// Variables which hold temporary data for each node-execution

View file

@ -12,6 +12,7 @@ export * from './instance-settings';
export * from './logging';
export * from './nodes-loader';
export * from './utils';
export { WorkflowHasIssuesError } from './errors/workflow-has-issues.error';
export * from './interfaces';
export * from './node-execute-functions';