Prechádzať zdrojové kódy

[Bug-8810] [master] add try catch to onSuccess method in the WorkflowExecuteThreadPool (#8896)

This closes #8810

Co-authored-by: guoshupei <guoshupei@lixiang.com>
guoshupei 3 rokov pred
rodič
commit
3114c91748

+ 11 - 5
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteThreadPool.java

@@ -121,11 +121,17 @@ public class WorkflowExecuteThreadPool extends ThreadPoolTaskExecutor {
 
             @Override
             public void onSuccess(Object result) {
-                if (workflowExecuteThread.workFlowFinish()) {
-                    stateWheelExecuteThread.removeProcess4TimeoutCheck(workflowExecuteThread.getProcessInstance());
-                    processInstanceExecCacheManager.removeByProcessInstanceId(processInstanceId);
-                    notifyProcessChanged(workflowExecuteThread.getProcessInstance());
-                    logger.info("process instance {} finished.", processInstanceId);
+                // if an exception occurs, first, the error message cannot be printed in the log;
+                // secondly, the `multiThreadFilterMap` cannot be remove the `workflowExecuteThread`, resulting in the state of process instance cannot be changed and memory leak
+                try {
+                    if (workflowExecuteThread.workFlowFinish()) {
+                        stateWheelExecuteThread.removeProcess4TimeoutCheck(workflowExecuteThread.getProcessInstance());
+                        processInstanceExecCacheManager.removeByProcessInstanceId(processInstanceId);
+                        notifyProcessChanged(workflowExecuteThread.getProcessInstance());
+                        logger.info("process instance {} finished.", processInstanceId);
+                    }
+                } catch (Exception e) {
+                    logger.error("handle events {} success, but notify changed error", processInstanceId, e);
                 }
                 multiThreadFilterMap.remove(workflowExecuteThread.getKey());
             }