mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-12-04 05:09:48 +08:00
move batchDelete Process Define/Instance Outside for transactional (#1260)
This commit is contained in:
parent
21bf3b8372
commit
4ace8ef4d9
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user