Skip to content

Commit

Permalink
fix(editor): Rerun failed nodes in manual executions (#9050)
Browse files Browse the repository at this point in the history
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
  • Loading branch information
2 people authored and despairblue committed Apr 4, 2024
1 parent cb2e460 commit a30e02d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
31 changes: 30 additions & 1 deletion packages/editor-ui/src/composables/useRunWorkflow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { useToast } from '@/composables/useToast';
import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
import { useNodeHelpers } from '@/composables/useNodeHelpers';
import { useRouter } from 'vue-router';
import type { IPinData, IRunData, Workflow } from 'n8n-workflow';
import { ExpressionError, type IPinData, type IRunData, type Workflow } from 'n8n-workflow';

vi.mock('@/stores/n8nRoot.store', () => ({
useRootStore: vi.fn().mockReturnValue({ pushConnectionActive: true }),
Expand Down Expand Up @@ -285,5 +285,34 @@ describe('useRunWorkflow({ router })', () => {
expect(result.startNodeNames).toContain('node1');
expect(result.runData).toBeUndefined();
});

it('should rerun failed parent nodes, adding them to the returned list of start nodes and not adding their result to runData', () => {
const { consolidateRunDataAndStartNodes } = useRunWorkflow({ router });
const directParentNodes = ['node1'];
const runData = {
node1: [
{
error: new ExpressionError('error'),
},
],
} as unknown as IRunData;
const workflowMock = {
getParentNodes: vi.fn().mockReturnValue([]),
nodes: {
node1: { disabled: false },
node2: { disabled: false },
},
} as unknown as Workflow;

const result = consolidateRunDataAndStartNodes(
directParentNodes,
runData,
undefined,
workflowMock,
);

expect(result.startNodeNames).toContain('node1');
expect(result.runData).toEqual(undefined);
});
});
});
9 changes: 7 additions & 2 deletions packages/editor-ui/src/composables/useRunWorkflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -428,14 +428,19 @@ export function useRunWorkflow(options: { router: ReturnType<typeof useRouter> }
parentNodes.push(directParentNode);

for (const parentNode of parentNodes) {
if (!runData[parentNode]?.length && !pinData?.[parentNode]?.length) {
// We want to execute nodes that don't have run data neither pin data
// in addition, if a node failed we want to execute it again
if (
(!runData[parentNode]?.length && !pinData?.[parentNode]?.length) ||
runData[parentNode]?.[0]?.error !== undefined
) {
// When we hit a node which has no data we stop and set it
// as a start node the execution from and then go on with other
// direct input nodes
startNodeNames.push(parentNode);
break;
}
if (runData[parentNode]) {
if (runData[parentNode] && !runData[parentNode]?.[0]?.error) {
newRunData[parentNode] = runData[parentNode]?.slice(0, 1);
}
}
Expand Down

0 comments on commit a30e02d

Please sign in to comment.
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy