From 703a68d4fed93c2eff6ace42b0f1568ce4950d6b Mon Sep 17 00:00:00 2001 From: mabashian Date: Tue, 3 May 2022 13:39:03 -0400 Subject: [PATCH] Don't repeatedly traverse workflow nodes when finding ancestors --- awx/ui/src/components/Workflow/workflowReducer.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/awx/ui/src/components/Workflow/workflowReducer.js b/awx/ui/src/components/Workflow/workflowReducer.js index 0d1c729967..e1bd2dfc8e 100644 --- a/awx/ui/src/components/Workflow/workflowReducer.js +++ b/awx/ui/src/components/Workflow/workflowReducer.js @@ -548,17 +548,21 @@ function selectSourceForLinking(state, sourceNode) { invalidLinkTargetIds.push(link.target.id); } if (!parentMap[link.target.id]) { - parentMap[link.target.id] = []; + parentMap[link.target.id] = { + parents: [], + traversed: false, + }; } - parentMap[link.target.id].push(link.source.id); + parentMap[link.target.id].parents.push(link.source.id); }); const getAncestors = (id) => { - if (parentMap[id]) { - parentMap[id].forEach((parentId) => { + if (parentMap[id] && !parentMap[id].traversed) { + parentMap[id].parents.forEach((parentId) => { invalidLinkTargetIds.push(parentId); getAncestors(parentId); }); + parentMap[id].traversed = true; } };