You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by le...@apache.org on 2021/12/07 07:26:35 UTC

[dolphinscheduler] branch dev updated: [Bug] [API] task definition release/delete bug (#7232)

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

leonbao pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 544b015  [Bug] [API] task definition release/delete bug (#7232)
544b015 is described below

commit 544b015f766a208cba1bd63f8d2bda762677b2b4
Author: JinYong Li <42...@users.noreply.github.com>
AuthorDate: Tue Dec 7 15:26:28 2021 +0800

    [Bug] [API] task definition release/delete bug (#7232)
    
    * fix worker group display
    
    * fix workflow query bug
    
    * fix workflow query bug
    
    * fix task definition release/delete bug
---
 .../service/impl/TaskDefinitionServiceImpl.java    | 31 +++++++++++++++++++---
 .../api/service/TaskDefinitionServiceImplTest.java |  7 +++++
 2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
index 23ac004..1745513 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskDefinitionServiceImpl.java
@@ -210,6 +210,19 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
         }
         int delete = taskDefinitionMapper.deleteByCode(taskCode);
         if (delete > 0) {
+            List<ProcessTaskRelation> taskRelationList = processTaskRelationMapper.queryUpstreamByCode(projectCode, taskCode);
+            if (!processTaskRelationList.isEmpty()) {
+                int deleteRelation = 0;
+                int deleteRelationLog = 0;
+                for (ProcessTaskRelation processTaskRelation : taskRelationList) {
+                    ProcessTaskRelationLog processTaskRelationLog = new ProcessTaskRelationLog(processTaskRelation);
+                    deleteRelation += processTaskRelationMapper.deleteRelation(processTaskRelationLog);
+                    deleteRelationLog += processTaskRelationLogMapper.deleteRelation(processTaskRelationLog);
+                }
+                if ((deleteRelation & deleteRelationLog) == 0) {
+                    throw new ServiceException(Status.DELETE_TASK_PROCESS_RELATION_ERROR);
+                }
+            }
             putMsg(result, Status.SUCCESS);
         } else {
             putMsg(result, Status.DELETE_TASK_DEFINE_BY_CODE_ERROR);
@@ -496,6 +509,7 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
      * @param releaseState releaseState
      * @return update result code
      */
+    @Transactional(rollbackFor = RuntimeException.class)
     @Override
     public Map<String, Object> releaseTaskDefinition(User loginUser, long projectCode, long code, ReleaseState releaseState) {
         Project project = projectMapper.queryByCode(projectCode);
@@ -514,11 +528,15 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
             putMsg(result, Status.TASK_DEFINE_NOT_EXIST, code);
             return result;
         }
-
+        TaskDefinitionLog taskDefinitionLog = taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(code, taskDefinition.getVersion());
+        if (taskDefinitionLog == null) {
+            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, code);
+            return result;
+        }
         switch (releaseState) {
             case OFFLINE:
                 taskDefinition.setFlag(Flag.NO);
-                taskDefinitionMapper.updateById(taskDefinition);
+                taskDefinitionLog.setFlag(Flag.NO);
                 break;
             case ONLINE:
                 String resourceIds = taskDefinition.getResourceIds();
@@ -534,13 +552,18 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
                     }
                 }
                 taskDefinition.setFlag(Flag.YES);
-                taskDefinitionMapper.updateById(taskDefinition);
+                taskDefinitionLog.setFlag(Flag.NO);
                 break;
             default:
                 putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, RELEASESTATE);
                 return result;
         }
-
+        int update = taskDefinitionMapper.updateById(taskDefinition);
+        int updateLog = taskDefinitionLogMapper.updateById(taskDefinitionLog);
+        if ((update == 0 && updateLog == 1) || (update == 1 && updateLog == 0)) {
+            putMsg(result, Status.UPDATE_TASK_DEFINITION_ERROR);
+            throw new ServiceException(Status.UPDATE_TASK_DEFINITION_ERROR);
+        }
         putMsg(result, Status.SUCCESS);
         return result;
     }
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
index 315f11c..d8852b4 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TaskDefinitionServiceImplTest.java
@@ -309,7 +309,14 @@ public class TaskDefinitionServiceImplTest {
         putMsg(result, Status.SUCCESS);
         TaskDefinition taskDefinition = new TaskDefinition();
         taskDefinition.setProjectCode(projectCode);
+        taskDefinition.setVersion(1);
+        taskDefinition.setCode(taskCode);
+        String params = "{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"echo 1\",\"conditionResult\":{\"successNode\":[\"\"],\"failedNode\":[\"\"]},\"dependence\":{}}";
+        taskDefinition.setTaskParams(params);
+        taskDefinition.setTaskType(TaskType.SHELL.getDesc());
         Mockito.when(taskDefinitionMapper.queryByCode(taskCode)).thenReturn(taskDefinition);
+        TaskDefinitionLog taskDefinitionLog = new TaskDefinitionLog(taskDefinition);
+        Mockito.when(taskDefinitionLogMapper.queryByDefinitionCodeAndVersion(taskCode, taskDefinition.getVersion())).thenReturn(taskDefinitionLog);
         Map<String, Object> offlineTaskResult = taskDefinitionService.releaseTaskDefinition(loginUser, projectCode, taskCode, ReleaseState.OFFLINE);
         Assert.assertEquals(Status.SUCCESS, offlineTaskResult.get(Constants.STATUS));