Browse Source

move batchDelete Process Define/Instance Outside for transactional (#1260)

Baoqi Wu 5 years ago
parent
commit
4ace8ef4d9

+ 30 - 1
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java

@@ -16,6 +16,7 @@
  */
 package org.apache.dolphinscheduler.api.controller;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
 import org.apache.dolphinscheduler.api.utils.Result;
@@ -31,6 +32,9 @@ import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 
@@ -436,7 +440,32 @@ public class ProcessDefinitionController extends BaseController{
         try{
             logger.info("delete process definition by ids, login user:{}, project name:{}, process definition ids:{}",
                     loginUser.getUserName(), projectName, processDefinitionIds);
-            Map<String, Object> result = processDefinitionService.batchDeleteProcessDefinitionByIds(loginUser, projectName, processDefinitionIds);
+
+            Map<String, Object> result = new HashMap<>(5);
+            List<Integer> deleteFailedIdList = new ArrayList<Integer>();
+            if(StringUtils.isNotEmpty(processDefinitionIds)){
+                String[] processDefinitionIdArray = processDefinitionIds.split(",");
+
+                for (String strProcessDefinitionId:processDefinitionIdArray) {
+                    int processDefinitionId = Integer.parseInt(strProcessDefinitionId);
+                    try {
+                        Map<String, Object> deleteResult = processDefinitionService.deleteProcessDefinitionById(loginUser, projectName, processDefinitionId);
+                        if(!Status.SUCCESS.equals(deleteResult.get(Constants.STATUS))){
+                            deleteFailedIdList.add(processDefinitionId);
+                            logger.error((String)deleteResult.get(Constants.MSG));
+                        }
+                    } catch (Exception e) {
+                        deleteFailedIdList.add(processDefinitionId);
+                    }
+                }
+            }
+
+            if(deleteFailedIdList.size() > 0){
+                putMsg(result, Status.BATCH_DELETE_PROCESS_DEFINE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
+            }else{
+                putMsg(result, Status.SUCCESS);
+            }
+
             return returnDataList(result);
         }catch (Exception e){
             logger.error(Status.BATCH_DELETE_PROCESS_DEFINE_BY_IDS_ERROR.getMsg(),e);

+ 30 - 1
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessInstanceController.java

@@ -16,6 +16,7 @@
  */
 package org.apache.dolphinscheduler.api.controller;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.service.ProcessInstanceService;
 import org.apache.dolphinscheduler.api.utils.Result;
@@ -34,6 +35,9 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import static org.apache.dolphinscheduler.api.enums.Status.*;
@@ -365,7 +369,32 @@ public class ProcessInstanceController extends BaseController{
         try{
             logger.info("delete process instance by ids, login user:{}, project name:{}, process instance ids :{}",
                     loginUser.getUserName(), projectName, processInstanceIds);
-            Map<String, Object> result = processInstanceService.batchDeleteProcessInstanceByIds(loginUser, projectName, processInstanceIds);
+            // task queue
+            ITaskQueue tasksQueue = TaskQueueFactory.getTaskQueueInstance();
+            Map<String, Object> result = new HashMap<>(5);
+            List<Integer> deleteFailedIdList = new ArrayList<Integer>();
+            if(StringUtils.isNotEmpty(processInstanceIds)){
+                String[] processInstanceIdArray = processInstanceIds.split(",");
+
+                for (String strProcessInstanceId:processInstanceIdArray) {
+                    int processInstanceId = Integer.parseInt(strProcessInstanceId);
+                    try {
+                        Map<String, Object> deleteResult = processInstanceService.deleteProcessInstanceById(loginUser, projectName, processInstanceId,tasksQueue);
+                        if(!Status.SUCCESS.equals(deleteResult.get(Constants.STATUS))){
+                            deleteFailedIdList.add(processInstanceId);
+                            logger.error((String)deleteResult.get(Constants.MSG));
+                        }
+                    } catch (Exception e) {
+                        deleteFailedIdList.add(processInstanceId);
+                    }
+                }
+            }
+            if(deleteFailedIdList.size() > 0){
+                putMsg(result, Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
+            }else{
+                putMsg(result, Status.SUCCESS);
+            }
+
             return returnDataList(result);
         }catch (Exception e){
             logger.error(BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR.getMsg(),e);

+ 0 - 50
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java

@@ -39,7 +39,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.dolphinscheduler.api.utils.CheckUtils;
 import org.apache.dolphinscheduler.dao.entity.*;
 import org.apache.dolphinscheduler.dao.mapper.*;
@@ -419,55 +418,6 @@ public class ProcessDefinitionService extends BaseDAGService {
         return result;
     }
 
-    /**
-     * batch delete process definition by ids
-     *
-     * @param loginUser login user
-     * @param projectName project name
-     * @param processDefinitionIds process definition id
-     * @return delete result code
-     */
-    public Map<String, Object> batchDeleteProcessDefinitionByIds(User loginUser, String projectName, String processDefinitionIds) {
-
-        Map<String, Object> result = new HashMap<>(5);
-
-        Map<String, Object> deleteReuslt = new HashMap<>(5);
-
-        List<Integer> deleteFailedIdList = new ArrayList<Integer>();
-        Project project = projectMapper.queryByName(projectName);
-
-        Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
-        Status resultEnum = (Status) checkResult.get(Constants.STATUS);
-        if (resultEnum != Status.SUCCESS) {
-            return checkResult;
-        }
-
-
-        if(StringUtils.isNotEmpty(processDefinitionIds)){
-            String[] processInstanceIdArray = processDefinitionIds.split(",");
-
-            for (String strProcessInstanceId:processInstanceIdArray) {
-                int processInstanceId = Integer.parseInt(strProcessInstanceId);
-                try {
-                    deleteReuslt = deleteProcessDefinitionById(loginUser, projectName, processInstanceId);
-                    if(!Status.SUCCESS.equals(deleteReuslt.get(Constants.STATUS))){
-                        deleteFailedIdList.add(processInstanceId);
-                        logger.error((String)deleteReuslt.get(Constants.MSG));
-                    }
-                } catch (Exception e) {
-                    deleteFailedIdList.add(processInstanceId);
-                }
-            }
-        }
-
-        if(deleteFailedIdList.size() > 0){
-            putMsg(result, Status.BATCH_DELETE_PROCESS_DEFINE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
-        }else{
-            putMsg(result, Status.SUCCESS);
-        }
-        return result;
-    }
-
     /**
      * release process definition: online / offline
      *

+ 0 - 45
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java

@@ -31,7 +31,6 @@ import org.apache.dolphinscheduler.common.model.TaskNode;
 import org.apache.dolphinscheduler.common.model.TaskNodeRelation;
 import org.apache.dolphinscheduler.common.process.Property;
 import org.apache.dolphinscheduler.common.queue.ITaskQueue;
-import org.apache.dolphinscheduler.common.queue.TaskQueueFactory;
 import org.apache.dolphinscheduler.common.utils.*;
 import org.apache.dolphinscheduler.common.utils.placeholder.BusinessTimeUtils;
 import org.apache.dolphinscheduler.dao.ProcessDao;
@@ -556,50 +555,6 @@ public class ProcessInstanceService extends BaseDAGService {
         return result;
     }
 
-    /**
-     * batch delete process instance by ids, at the same time,delete task instance and their mapping relation data
-     *
-     * @param loginUser login user
-     * @param projectName project name
-     * @param processInstanceIds process instance id
-     * @return delete result code
-     */
-    public Map<String, Object> batchDeleteProcessInstanceByIds(User loginUser, String projectName, String processInstanceIds) {
-        // task queue
-        ITaskQueue tasksQueue = TaskQueueFactory.getTaskQueueInstance();
-
-        Map<String, Object> result = new HashMap<>(5);
-        List<Integer> deleteFailedIdList = new ArrayList<Integer>();
-
-        Project project = projectMapper.queryByName(projectName);
-
-        Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
-        Status resultEnum = (Status) checkResult.get(Constants.STATUS);
-        if (resultEnum != Status.SUCCESS) {
-            return checkResult;
-        }
-
-        if(StringUtils.isNotEmpty(processInstanceIds)){
-            String[] processInstanceIdArray = processInstanceIds.split(",");
-
-            for (String strProcessInstanceId:processInstanceIdArray) {
-                int processInstanceId = Integer.parseInt(strProcessInstanceId);
-                try {
-                    deleteProcessInstanceById(loginUser, projectName, processInstanceId,tasksQueue);
-                } catch (Exception e) {
-                    deleteFailedIdList.add(processInstanceId);
-                }
-            }
-        }
-        if(deleteFailedIdList.size() > 0){
-            putMsg(result, Status.BATCH_DELETE_PROCESS_INSTANCE_BY_IDS_ERROR,StringUtils.join(deleteFailedIdList.toArray(),","));
-        }else{
-            putMsg(result, Status.SUCCESS);
-        }
-
-        return result;
-    }
-
     /**
      * view process instance variables
      *

+ 0 - 11
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java

@@ -76,15 +76,4 @@ public class ProcessDefinitionServiceTest {
         Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
         logger.info(JSON.toJSONString(map));
     }
-
-    @Test
-    public void batchDeleteProcessDefinitionByIds() throws Exception {
-
-        User loginUser = new User();
-        loginUser.setId(-1);
-        loginUser.setUserType(UserType.GENERAL_USER);
-        Map<String, Object> map = processDefinitionService.batchDeleteProcessDefinitionByIds(loginUser, "li_test_1", "2,3");
-        Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
-        logger.info(JSON.toJSONString(map));
-    }
 }

+ 0 - 12
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessInstanceServiceTest.java

@@ -80,16 +80,4 @@ public class ProcessInstanceServiceTest {
         Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
         logger.info(JSON.toJSONString(map));
     }
-
-    @Test
-    public void batchDeleteProcessInstanceByIds() throws Exception {
-
-        User loginUser = new User();
-        loginUser.setId(-1);
-        loginUser.setUserType(UserType.GENERAL_USER);
-        Map<String, Object> map = processInstanceService.batchDeleteProcessInstanceByIds(loginUser, "li_test_1", "4,2,300");
-
-        Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
-        logger.info(JSON.toJSONString(map));
-    }
 }