From 1a8811cb419551045d0d05b99116e2d2560d6a6f Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Sun, 27 Nov 2022 15:34:26 +0800 Subject: [PATCH] Set max loop times when consume StateEvent to avoid dead loop influence the thread. (#13007) --- .../server/master/runner/WorkflowExecuteRunnable.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java index 5855fb7d9c..104ce4ae2a 100644 --- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java +++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java @@ -285,10 +285,13 @@ public class WorkflowExecuteRunnable implements Callable { stateEvents); return; } - StateEvent stateEvent = null; - while (!this.stateEvents.isEmpty()) { + int loopTimes = stateEvents.size(); + for (int i = 0; i < loopTimes; i++) { + final StateEvent stateEvent = this.stateEvents.peek(); try { - stateEvent = this.stateEvents.peek(); + if (stateEvent == null) { + return; + } LoggerUtils.setWorkflowAndTaskInstanceIDMDC(stateEvent.getProcessInstanceId(), stateEvent.getTaskInstanceId()); // if state handle success then will remove this state, otherwise will retry this state next time.