You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ke...@apache.org on 2022/01/20 05:21:18 UTC

[dolphinscheduler] branch 2.0.3-prepare updated: add delete workflow instance when delete process definition (#8131)

This is an automated email from the ASF dual-hosted git repository.

kerwin pushed a commit to branch 2.0.3-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/2.0.3-prepare by this push:
     new 4748df9  add delete workflow instance when delete process definition (#8131)
4748df9 is described below

commit 4748df9990f97d14c7ce5e85b3e4013992155671
Author: wind <ca...@users.noreply.github.com>
AuthorDate: Thu Jan 20 13:21:01 2022 +0800

    add delete workflow instance when delete process definition (#8131)
    
    Co-authored-by: caishunfeng <53...@qq.com>
---
 .../service/impl/ProcessDefinitionServiceImpl.java | 33 ++++++++++++++++++++++
 .../service/process/ProcessService.java            |  3 +-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index cfbeb25..a88e5eb 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -709,11 +709,44 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
         if (deleteRelation == 0) {
             logger.warn("The process definition has not relation, it will be delete successfully");
         }
+
+        try {
+            syncDeleteWorkflowInstanceByCode(processDefinition.getCode());
+        } catch (Exception e) {
+            logger.error("delete workflow instance error", e);
+        }
+
         putMsg(result, Status.SUCCESS);
         return result;
     }
 
     /**
+     * delete workflow instance by processDefinitionCode
+     * 1.delete processInstances
+     * 2.delete subWorkProcesses
+     * 3.delete processMap
+     * 4.delete taskInstances
+     *
+     * todo delete syncly may take a long time when many processInstance
+     * @param processDefinitionCode
+     */
+    private void syncDeleteWorkflowInstanceByCode(long processDefinitionCode) {
+        int pageSize = 100;
+        while (true) {
+            List<ProcessInstance> deleteProcessInstances = processInstanceService.queryByProcessDefineCode(processDefinitionCode, pageSize);
+            if (CollectionUtils.isEmpty(deleteProcessInstances)) {
+                break;
+            }
+            for (ProcessInstance deleteProcessInstance : deleteProcessInstances) {
+                processService.deleteWorkProcessInstanceById(deleteProcessInstance.getId());
+                processService.deleteAllSubWorkProcessByParentId(deleteProcessInstance.getId());
+                processService.deleteWorkProcessMapByParentId(deleteProcessInstance.getId());
+                processService.deleteWorkTaskInstanceByProcessInstanceId(deleteProcessInstance.getId());
+            }
+        }
+    }
+
+    /**
      * release process definition: online / offline
      *
      * @param loginUser login user
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index c214723..c40a796 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -17,7 +17,6 @@
 
 package org.apache.dolphinscheduler.service.process;
 
-import static java.util.stream.Collectors.toSet;
 import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_COMPLEMENT_DATA_END_DATE;
 import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_COMPLEMENT_DATA_START_DATE;
 import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_EMPTY_SUB_PROCESS;
@@ -28,6 +27,8 @@ import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS
 import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_PARENT_INSTANCE_ID;
 import static org.apache.dolphinscheduler.common.Constants.LOCAL_PARAMS;
 
+import static java.util.stream.Collectors.toSet;
+
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.AuthorizationType;
 import org.apache.dolphinscheduler.common.enums.CommandType;