You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ca...@apache.org on 2022/12/07 01:53:00 UTC

[dolphinscheduler] branch dev updated: [Improvement] optimization task definition & fix in the task definition list, if one task have more pre task, the task list can't show all task (#13106)

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

caishunfeng 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 cb8d125e0f [Improvement] optimization task definition & fix in the task definition list, if one task have more pre task, the task list can't show all task (#13106)
cb8d125e0f is described below

commit cb8d125e0f5c099078af7f1629cbdfeec0692951
Author: jackfanwan <61...@users.noreply.github.com>
AuthorDate: Wed Dec 7 09:52:53 2022 +0800

    [Improvement] optimization task definition & fix in the task definition list, if one task have more pre task, the task list can't show all task (#13106)
    
    * fix in the task definition list, if one task have more pre task, the task list can't show all task
    
    * modify code style
    
    * in the task definition, delete search workflow name filter, and  fix in the task definition list, if one task have more pre task, the task list can't show all task
    
    * modify code style
    
    * modify code style
    
    * delete useless select sql
    
    * add annotation
    
    Co-authored-by: fanwanlong <fa...@kezaihui.com>
---
 .../api/controller/TaskDefinitionController.java   |  4 +--
 .../api/service/TaskDefinitionService.java         |  2 --
 .../service/impl/TaskDefinitionServiceImpl.java    | 42 ++++++++++++++++------
 .../api/service/TaskDefinitionServiceImplTest.java | 33 +++++++++++++++++
 .../dao/mapper/TaskDefinitionMapper.java           | 11 ++++--
 .../dao/mapper/TaskDefinitionMapper.xml            | 25 ++++++++-----
 .../views/projects/task/definition/batch-task.tsx  | 15 --------
 7 files changed, 90 insertions(+), 42 deletions(-)

diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
index 1d1befb361..ab376184ff 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/TaskDefinitionController.java
@@ -349,7 +349,6 @@ public class TaskDefinitionController extends BaseController {
     @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
     public Result queryTaskDefinitionListPaging(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                                 @Parameter(name = "projectCode", description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
-                                                @RequestParam(value = "searchWorkflowName", required = false) String searchWorkflowName,
                                                 @RequestParam(value = "searchTaskName", required = false) String searchTaskName,
                                                 @RequestParam(value = "taskType", required = false) String taskType,
                                                 @RequestParam(value = "taskExecuteType", required = false, defaultValue = "BATCH") TaskExecuteType taskExecuteType,
@@ -359,9 +358,8 @@ public class TaskDefinitionController extends BaseController {
         if (!result.checkResult()) {
             return result;
         }
-        searchWorkflowName = ParameterUtils.handleEscapes(searchWorkflowName);
         searchTaskName = ParameterUtils.handleEscapes(searchTaskName);
-        return taskDefinitionService.queryTaskDefinitionListPaging(loginUser, projectCode, searchWorkflowName,
+        return taskDefinitionService.queryTaskDefinitionListPaging(loginUser, projectCode,
                 searchTaskName, taskType, taskExecuteType, pageNo, pageSize);
     }
 
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
index 40923db839..8e76925667 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TaskDefinitionService.java
@@ -217,7 +217,6 @@ public interface TaskDefinitionService {
      *
      * @param loginUser login user
      * @param projectCode project code
-     * @param searchWorkflowName searchWorkflowName
      * @param searchTaskName searchTaskName
      * @param taskType taskType
      * @param taskExecuteType taskExecuteType
@@ -227,7 +226,6 @@ public interface TaskDefinitionService {
      */
     Result queryTaskDefinitionListPaging(User loginUser,
                                          long projectCode,
-                                         String searchWorkflowName,
                                          String searchTaskName,
                                          String taskType,
                                          TaskExecuteType taskExecuteType,
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 5fde6beda0..2d9fa4c33d 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
@@ -1045,7 +1045,6 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
     @Override
     public Result queryTaskDefinitionListPaging(User loginUser,
                                                 long projectCode,
-                                                String searchWorkflowName,
                                                 String searchTaskName,
                                                 String taskType,
                                                 TaskExecuteType taskExecuteType,
@@ -1063,12 +1062,33 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
         }
         taskType = taskType == null ? StringUtils.EMPTY : taskType;
         Page<TaskMainInfo> page = new Page<>(pageNo, pageSize);
-        IPage<TaskMainInfo> taskMainInfoIPage =
-                taskDefinitionMapper.queryDefineListPaging(page, projectCode, searchWorkflowName,
-                        searchTaskName, taskType, taskExecuteType);
-        List<TaskMainInfo> records = taskMainInfoIPage.getRecords();
+        // first, query task code by page size
+        IPage<TaskMainInfo> taskMainInfoIPage = taskDefinitionMapper.queryDefineListPaging(page, projectCode,
+                searchTaskName, taskType, taskExecuteType);
+        // then, query task relevant info by task code
+        fillRecords(projectCode, taskMainInfoIPage);
+        PageInfo<TaskMainInfo> pageInfo = new PageInfo<>(pageNo, pageSize);
+        pageInfo.setTotal((int) taskMainInfoIPage.getTotal());
+        pageInfo.setTotalList(taskMainInfoIPage.getRecords());
+        result.setData(pageInfo);
+        putMsg(result, Status.SUCCESS);
+        return result;
+    }
+
+    private void fillRecords(long projectCode, IPage<TaskMainInfo> taskMainInfoIPage) {
+        List<TaskMainInfo> records = Collections.emptyList();
+        if (CollectionUtils.isNotEmpty(taskMainInfoIPage.getRecords())) {
+            // query task relevant info by task code
+            records = taskDefinitionMapper.queryDefineListByCodeList(projectCode,
+                    taskMainInfoIPage.getRecords().stream().map(TaskMainInfo::getTaskCode)
+                            .collect(Collectors.toList()));
+        }
+        // because first step, so need init records
+        taskMainInfoIPage.setRecords(Collections.emptyList());
         if (CollectionUtils.isNotEmpty(records)) {
+            // task code and task info map
             Map<Long, TaskMainInfo> taskMainInfoMap = new HashMap<>();
+            // construct task code and relevant upstream task list map
             for (TaskMainInfo info : records) {
                 taskMainInfoMap.compute(info.getTaskCode(), (k, v) -> {
                     if (v == null) {
@@ -1087,14 +1107,14 @@ public class TaskDefinitionServiceImpl extends BaseServiceImpl implements TaskDe
                     return v;
                 });
             }
+            // because taskMainInfoMap's value is TaskMainInfo,
+            // TaskMainInfo have task code info, so only need gain taskMainInfoMap's values
             taskMainInfoIPage.setRecords(Lists.newArrayList(taskMainInfoMap.values()));
         }
-        PageInfo<TaskMainInfo> pageInfo = new PageInfo<>(pageNo, pageSize);
-        pageInfo.setTotal((int) taskMainInfoIPage.getTotal());
-        pageInfo.setTotalList(taskMainInfoIPage.getRecords());
-        result.setData(pageInfo);
-        putMsg(result, Status.SUCCESS);
-        return result;
+    }
+
+    private void fillWorkflowInfo(long projectCode, IPage<TaskMainInfo> taskMainInfoIPage) {
+
     }
 
     @Override
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 a4ef76a747..b6569a1e67 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
@@ -32,6 +32,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.exceptions.ServiceException;
 import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl;
 import org.apache.dolphinscheduler.api.service.impl.TaskDefinitionServiceImpl;
+import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.enums.Priority;
@@ -43,6 +44,7 @@ import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelation;
 import org.apache.dolphinscheduler.dao.entity.Project;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
+import org.apache.dolphinscheduler.dao.entity.TaskMainInfo;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
 import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper;
@@ -54,6 +56,7 @@ import org.apache.dolphinscheduler.service.task.TaskPluginManager;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -67,6 +70,9 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
 @ExtendWith(MockitoExtension.class)
 public class TaskDefinitionServiceImplTest {
 
@@ -306,6 +312,33 @@ public class TaskDefinitionServiceImplTest {
         Assertions.assertEquals(Status.SUCCESS, genTaskCodeList.get(Constants.STATUS));
     }
 
+    @Test
+    public void testQueryTaskDefinitionListPaging() {
+        Project project = getProject();
+        Map<String, Object> checkResult = new HashMap<>();
+        checkResult.put(Constants.STATUS, Status.SUCCESS);
+        Integer pageNo = 1;
+        Integer pageSize = 10;
+        IPage<TaskMainInfo> taskMainInfoIPage = new Page<>();
+        TaskMainInfo taskMainInfo = new TaskMainInfo();
+        taskMainInfo.setTaskCode(TASK_CODE);
+        taskMainInfo.setUpstreamTaskCode(4L);
+        taskMainInfo.setUpstreamTaskName("4");
+        taskMainInfoIPage.setRecords(Collections.singletonList(taskMainInfo));
+        taskMainInfoIPage.setTotal(10L);
+        Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(project);
+        Mockito.when(projectService.checkProjectAndAuth(user, project, PROJECT_CODE, TASK_DEFINITION))
+                .thenReturn(checkResult);
+        Mockito.when(taskDefinitionMapper.queryDefineListPaging(Mockito.any(Page.class), Mockito.anyLong(),
+                Mockito.isNull(), Mockito.anyString(), Mockito.isNull()))
+                .thenReturn(taskMainInfoIPage);
+        Mockito.when(taskDefinitionMapper.queryDefineListByCodeList(PROJECT_CODE, Collections.singletonList(3L)))
+                .thenReturn(Collections.singletonList(taskMainInfo));
+        Result result = taskDefinitionService.queryTaskDefinitionListPaging(user, PROJECT_CODE,
+                null, null, null, pageNo, pageSize);
+        Assertions.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
+    }
+
     @Test
     public void testReleaseTaskDefinition() {
         Mockito.when(projectMapper.queryByCode(PROJECT_CODE)).thenReturn(getProject());
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java
index 17243de049..4539256e02 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.java
@@ -111,7 +111,6 @@ public interface TaskDefinitionMapper extends BaseMapper<TaskDefinition> {
      *
      * @param page page
      * @param projectCode projectCode
-     * @param searchWorkflowName searchWorkflowName
      * @param searchTaskName searchTaskName
      * @param taskType taskType
      * @param taskExecuteType taskExecuteType
@@ -119,11 +118,19 @@ public interface TaskDefinitionMapper extends BaseMapper<TaskDefinition> {
      */
     IPage<TaskMainInfo> queryDefineListPaging(IPage<TaskMainInfo> page,
                                               @Param("projectCode") long projectCode,
-                                              @Param("searchWorkflowName") String searchWorkflowName,
                                               @Param("searchTaskName") String searchTaskName,
                                               @Param("taskType") String taskType,
                                               @Param("taskExecuteType") TaskExecuteType taskExecuteType);
 
+    /**
+     * task main info
+     * @param projectCode project code
+     * @param codeList code list
+     * @return task main info
+     */
+    List<TaskMainInfo> queryDefineListByCodeList(@Param("projectCode") long projectCode,
+                                                 @Param("codeList") List<Long> codeList);
+
     /**
      * query task definition by code list
      *
diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml
index 46c6dfcbcf..a4040bd698 100644
--- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml
+++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskDefinitionMapper.xml
@@ -109,13 +109,8 @@
         </foreach>
     </insert>
     <select id="queryDefineListPaging" resultType="org.apache.dolphinscheduler.dao.entity.TaskMainInfo">
-        select td.name task_name,td.code task_code,td.version task_version,td.task_type,td.create_time task_create_time,td.update_time task_update_time,
-        pd.code process_definition_code,pd.version process_definition_version,pd.name process_definition_name,pd.release_state process_release_state,
-        pt.pre_task_code upstream_task_code,up.name upstream_task_name
+        select td.code        task_code
         from t_ds_task_definition td
-        LEFT JOIN t_ds_process_task_relation pt ON td.code	= pt.post_task_code and td.version=pt.post_task_version
-        LEFT JOIN t_ds_process_definition pd ON pt.process_definition_code = pd.code and pt.process_definition_version=pd.version
-        LEFT JOIN t_ds_task_definition up on pt.pre_task_code=up.code and pt.pre_task_version=up.version
         WHERE td.project_code = #{projectCode}
         <if test="taskType != ''">
             and td.task_type = #{taskType}
@@ -123,14 +118,26 @@
         <if test="taskExecuteType != null">
             and td.task_execute_type = #{taskExecuteType.code}
         </if>
-        <if test="searchWorkflowName != null and searchWorkflowName != ''">
-            and pd.name like concat('%', #{searchWorkflowName}, '%')
-        </if>
         <if test="searchTaskName != null and searchTaskName != ''">
             and td.name like concat('%', #{searchTaskName}, '%')
         </if>
         order by td.update_time desc
     </select>
+
+    <select id="queryDefineListByCodeList" resultType="org.apache.dolphinscheduler.dao.entity.TaskMainInfo">
+        select td.name task_name,td.code task_code,td.version task_version,td.task_type,td.create_time task_create_time,td.update_time task_update_time,
+        pd.code process_definition_code,pd.version process_definition_version,pd.name process_definition_name,pd.release_state process_release_state,
+        pt.pre_task_code upstream_task_code,up.name upstream_task_name
+        from t_ds_task_definition td
+        LEFT JOIN t_ds_process_task_relation pt ON td.code	= pt.post_task_code and td.version=pt.post_task_version
+        LEFT JOIN t_ds_process_definition pd ON pt.process_definition_code = pd.code and pt.process_definition_version=pd.version
+        LEFT JOIN t_ds_task_definition up on pt.pre_task_code=up.code and pt.pre_task_version=up.version
+        WHERE td.project_code = #{projectCode} and td.code in
+        <foreach collection="codeList" item="code" open="(" separator="," close=")">
+            #{code}
+        </foreach>
+    </select>
+
     <select id="queryByCodeList" resultType="org.apache.dolphinscheduler.dao.entity.TaskDefinition">
         select
         <include refid="baseSql"/>
diff --git a/dolphinscheduler-ui/src/views/projects/task/definition/batch-task.tsx b/dolphinscheduler-ui/src/views/projects/task/definition/batch-task.tsx
index 10392126db..c697341d65 100644
--- a/dolphinscheduler-ui/src/views/projects/task/definition/batch-task.tsx
+++ b/dolphinscheduler-ui/src/views/projects/task/definition/batch-task.tsx
@@ -60,7 +60,6 @@ const BatchTaskDefinition = defineComponent({
         pageSize: variables.pageSize,
         pageNo: variables.page,
         searchTaskName: variables.searchTaskName,
-        searchWorkflowName: variables.searchWorkflowName,
         taskType: variables.taskType
       })
     }
@@ -80,11 +79,6 @@ const BatchTaskDefinition = defineComponent({
       onSearch()
     }
 
-    const onClearSearchWorkflowName = () => {
-      variables.searchWorkflowName = null
-      onSearch()
-    }
-
     const onClearSearchTaskType = () => {
       variables.taskType = null
       onSearch()
@@ -126,7 +120,6 @@ const BatchTaskDefinition = defineComponent({
       ...toRefs(task),
       onSearch,
       onClearSearchTaskName,
-      onClearSearchWorkflowName,
       onClearSearchTaskType,
       requestData,
       onUpdatePageSize,
@@ -165,14 +158,6 @@ const BatchTaskDefinition = defineComponent({
                 placeholder={t('project.task.task_name')}
                 onClear={this.onClearSearchTaskName}
               />
-              <NInput
-                allowInput={this.trim}
-                size='small'
-                clearable
-                v-model={[this.searchWorkflowName, 'value']}
-                placeholder={t('project.task.workflow_name')}
-                onClear={this.onClearSearchWorkflowName}
-              />
               <NSelect
                 v-model={[this.taskType, 'value']}
                 size='small'