Skip to content

Commit dfc2f0d

Browse files
Merge pull request hpsa#279 from MicroFocus/nissim-pipeline-multi-parents
defect #2045075-[Octane- Jenkins AT plugin]Performance issues on Jenk…
2 parents 2bfba53 + ab021d9 commit dfc2f0d

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

src/main/java/com/microfocus/application/automation/tools/octane/model/CIEventCausesFactory.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -127,20 +127,21 @@ public static List<CIEventCause> processCauses(Run<?, ?> run) {
127127

128128
public static List<CIEventCause> processCauses(FlowNode flowNode) {
129129
List<CIEventCause> causes = new LinkedList<>();
130-
processCauses(flowNode, causes, new LinkedHashSet<>());
130+
processCauses(flowNode, causes, new LinkedHashSet<>(),new HashSet<>());
131131
return causes;
132132
}
133133

134-
private static void processCauses(FlowNode flowNode, List<CIEventCause> causes, Set<FlowNode> startStagesToSkip) {
134+
private static void processCauses(FlowNode flowNode, List<CIEventCause> causes, Set<FlowNode> startStagesToSkip,Set<FlowNode> visitedParents) {
135135
// we reached the start of the flow - add WorkflowRun as an initial UPSTREAM cause
136-
if (flowNode.getParents().isEmpty()) {
136+
if (flowNode.getParents().isEmpty() && !visitedParents.contains(flowNode)) {
137137
WorkflowRun parentRun = BuildHandlerUtils.extractParentRun(flowNode);
138138
CIEventCause cause = dtoFactory.newDTO(CIEventCause.class)
139139
.setType(CIEventCauseType.UPSTREAM)
140140
.setProject(BuildHandlerUtils.getJobCiId(parentRun))
141141
.setBuildCiId(BuildHandlerUtils.getBuildCiId(parentRun))
142142
.setCauses(CIEventCausesFactory.processCauses((parentRun)));
143-
causes.add(cause);
143+
visitedParents.add(flowNode);
144+
causes.add(cause);
144145
}
145146

146147
// if we are calculating causes for the END STEP - exclude it's own START STEP from calculation
@@ -151,21 +152,24 @@ private static void processCauses(FlowNode flowNode, List<CIEventCause> causes,
151152
for (FlowNode parent : flowNode.getParents()) {
152153
if (BuildHandlerUtils.isStageEndNode(parent)) {
153154
startStagesToSkip.add(((StepEndNode) parent).getStartNode());
154-
processCauses(parent, causes, startStagesToSkip);
155+
processCauses(parent, causes, startStagesToSkip,visitedParents);
155156
} else if (BuildHandlerUtils.isStageStartNode(parent)) {
156157
if (!startStagesToSkip.contains(parent)) {
157-
CIEventCause cause = dtoFactory.newDTO(CIEventCause.class)
158-
.setType(CIEventCauseType.UPSTREAM)
159-
.setProject(parent.getDisplayName())
160-
.setBuildCiId(String.valueOf(BuildHandlerUtils.extractParentRun(parent).getNumber()));
161-
causes.add(cause);
162-
processCauses(parent, cause.getCauses(), startStagesToSkip);
158+
if(!visitedParents.contains(parent)) {
159+
visitedParents.add(parent);
160+
CIEventCause cause = dtoFactory.newDTO(CIEventCause.class)
161+
.setType(CIEventCauseType.UPSTREAM)
162+
.setProject(parent.getDisplayName())
163+
.setBuildCiId(String.valueOf(BuildHandlerUtils.extractParentRun(parent).getNumber()));
164+
causes.add(cause);
165+
processCauses(parent, cause.getCauses(), startStagesToSkip, visitedParents);
166+
}
163167
} else {
164168
startStagesToSkip.remove(parent);
165-
processCauses(parent, causes, startStagesToSkip);
169+
processCauses(parent, causes, startStagesToSkip, visitedParents);
166170
}
167171
} else {
168-
processCauses(parent, causes, startStagesToSkip);
172+
processCauses(parent, causes, startStagesToSkip, visitedParents);
169173
}
170174
}
171175
}

0 commit comments

Comments
 (0)