You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by pe...@apache.org on 2022/04/12 11:27:54 UTC

[incubator-linkis] branch dev-1.1.2 updated: add undone job query cache and add api /listundone (#1949)

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

peacewong pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git


The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
     new 9f91eee45 add undone job query cache and add api /listundone (#1949)
9f91eee45 is described below

commit 9f91eee45dcee74c4a55b6c7a25d99b733e9b1cd
Author: legendtkl <ta...@gmail.com>
AuthorDate: Tue Apr 12 19:27:49 2022 +0800

    add undone job query cache and add api /listundone (#1949)
    
    * add undone job query cache and add api /listundone
    
    * address review comment
---
 .../conf/linkis-ps-publicservice.properties        |  2 +
 .../linkis/jobhistory/cache/QueryCacheManager.java |  2 +
 .../cache/impl/DefaultQueryCacheManager.java       | 75 +++++++++++++++++++++
 .../cache/impl/ScheduledRefreshUndoneJob.java      | 45 +++++++++++++
 .../JobHistoryConfiguration.java}                  | 15 ++---
 .../linkis/jobhistory/dao/JobHistoryMapper.java    | 15 ++++-
 .../jobhistory/dao/impl/JobHistoryMapper.xml       | 15 +++++
 .../jobhistory/restful/api/QueryRestfulApi.java    | 77 +++++++++++++++++++++-
 .../jobhistory/service/JobHistoryQueryService.java |  2 +-
 .../service/impl/JobHistoryQueryServiceImpl.scala  | 10 +--
 10 files changed, 241 insertions(+), 17 deletions(-)

diff --git a/assembly-combined-package/assembly-combined/conf/linkis-ps-publicservice.properties b/assembly-combined-package/assembly-combined/conf/linkis-ps-publicservice.properties
index f6f712928..e8376381b 100644
--- a/assembly-combined-package/assembly-combined/conf/linkis-ps-publicservice.properties
+++ b/assembly-combined-package/assembly-combined/conf/linkis-ps-publicservice.properties
@@ -29,6 +29,8 @@ hive.meta.user=
 hive.meta.password=
 # associated with the logged-in user when querying metadata:default value is true
 #linkis.metadata.hive.permission.with-login-user-enabled
+#wds.linkis.jobhistory.undone.job.minimum.id=0
+#wds.linkis.jobhistory.undone.job.refreshtime.daily=00:15
 
 ##Spring
 spring.server.port=9105
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java
index 65d3633d2..80cc74f11 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java
@@ -26,4 +26,6 @@ public interface QueryCacheManager {
     void cleanAll();
 
     void refreshAll();
+
+    void refreshUndoneTask();
 }
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/DefaultQueryCacheManager.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/DefaultQueryCacheManager.java
index 78f2b805c..74501fcf0 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/DefaultQueryCacheManager.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/DefaultQueryCacheManager.java
@@ -18,6 +18,9 @@
 package org.apache.linkis.jobhistory.cache.impl;
 
 import org.apache.linkis.jobhistory.cache.QueryCacheManager;
+import org.apache.linkis.jobhistory.conf.JobHistoryConfiguration;
+import org.apache.linkis.jobhistory.dao.JobHistoryMapper;
+import org.apache.linkis.jobhistory.entity.JobHistory;
 import org.apache.linkis.jobhistory.util.QueryConfig;
 
 import org.springframework.beans.factory.InitializingBean;
@@ -25,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.stereotype.Component;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.collect.Maps;
@@ -32,6 +37,8 @@ import org.quartz.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
 
@@ -42,9 +49,13 @@ public class DefaultQueryCacheManager implements QueryCacheManager, Initializing
 
     @Autowired private SchedulerFactoryBean schedulerFactoryBean;
 
+    @Autowired private JobHistoryMapper jobHistoryMapper;
+
     private Map<String, Cache<String, UserTaskResultCache>> engineUserCaches =
             Maps.newConcurrentMap();
 
+    private Long undoneTaskMinId = JobHistoryConfiguration.UNDONE_JOB_MINIMUM_ID.getValue();
+
     @Override
     public void afterPropertiesSet() throws Exception {
         Scheduler scheduler = schedulerFactoryBean.getScheduler();
@@ -84,6 +95,41 @@ public class DefaultQueryCacheManager implements QueryCacheManager, Initializing
             logger.info("Submitted cache 00:00 refresh job.");
         }
 
+        int hour = 0;
+        int minute = 15;
+
+        try {
+            String refreshTime = JobHistoryConfiguration.UNDONE_JOB_REFRESH_TIME_DAILY.getValue();
+            String[] parts = refreshTime.split(":");
+            if (parts.length != 2) {
+                logger.error(
+                        "Invalid UNDONE_JOB_REFRESH_TIME_DAILY value: {}. It should be the format of '00:15'. Will use the default value '00:15'",
+                        refreshTime);
+            }
+            hour = Integer.parseInt(parts[0]);
+            minute = Integer.parseInt(parts[1]);
+        } catch (Exception ignored) {
+            logger.warn(
+                    "parse the config 'wds.linkis.jobhistory.undone.job.refreshtime.daily' failed. ",
+                    ignored);
+        }
+
+        CronScheduleBuilder refreshUndoneJobBuilder =
+                CronScheduleBuilder.dailyAtHourAndMinute(hour, minute);
+        JobDetail refreshUndoneJobDetail =
+                JobBuilder.newJob(ScheduledRefreshUndoneJob.class)
+                        .withIdentity("ScheduledRefreshUndoneJob")
+                        .storeDurably()
+                        .build();
+        refreshUndoneJobDetail.getJobDataMap().put(QueryCacheManager.class.getName(), this);
+        Trigger refreshTrigger =
+                TriggerBuilder.newTrigger()
+                        .withIdentity("ScheduledRefreshUndoneJob")
+                        .withSchedule(refreshUndoneJobBuilder)
+                        .build();
+        scheduler.scheduleJob(refreshUndoneJobDetail, refreshTrigger);
+        logger.info("Submitted cache 00:15 refresh undone job.");
+
         if (!scheduler.isShutdown()) {
             scheduler.start();
         }
@@ -119,6 +165,31 @@ public class DefaultQueryCacheManager implements QueryCacheManager, Initializing
         foreach(UserTaskResultCache::refresh);
     }
 
+    @Override
+    public void refreshUndoneTask() {
+        PageHelper.startPage(1, 10);
+        List<JobHistory> queryTasks = null;
+        try {
+            queryTasks =
+                    jobHistoryMapper.searchWithIdOrderAsc(
+                            undoneTaskMinId,
+                            null,
+                            Arrays.asList("Running", "Inited", "Scheduled"),
+                            null,
+                            null,
+                            null);
+        } finally {
+            PageHelper.clearPage();
+        }
+
+        PageInfo<JobHistory> pageInfo = new PageInfo<>(queryTasks);
+        List<JobHistory> list = pageInfo.getList();
+        if (!list.isEmpty()) {
+            undoneTaskMinId = list.get(0).getId();
+            logger.info("Refreshing undone tasks, minimum id: {}", undoneTaskMinId);
+        }
+    }
+
     private void foreach(Consumer<UserTaskResultCache> consumer) {
         for (Cache<String, UserTaskResultCache> cacheContainer : engineUserCaches.values()) {
             for (UserTaskResultCache cache : cacheContainer.asMap().values()) {
@@ -130,4 +201,8 @@ public class DefaultQueryCacheManager implements QueryCacheManager, Initializing
     private Cache<String, UserTaskResultCache> createUserCaches() {
         return CacheBuilder.newBuilder().build();
     }
+
+    public Long getUndoneTaskMinId() {
+        return undoneTaskMinId;
+    }
 }
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/ScheduledRefreshUndoneJob.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/ScheduledRefreshUndoneJob.java
new file mode 100644
index 000000000..a10f36de2
--- /dev/null
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/impl/ScheduledRefreshUndoneJob.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.jobhistory.cache.impl;
+
+import org.apache.linkis.jobhistory.cache.QueryCacheManager;
+
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ScheduledRefreshUndoneJob extends QuartzJobBean {
+    private static Logger logger = LoggerFactory.getLogger(ScheduledRefreshUndoneJob.class);
+
+    @Override
+    protected void executeInternal(JobExecutionContext jobExecutionContext)
+            throws JobExecutionException {
+        logger.info("Started cache refresh job.");
+        QueryCacheManager queryCacheManager =
+                (QueryCacheManager)
+                        jobExecutionContext
+                                .getJobDetail()
+                                .getJobDataMap()
+                                .get(QueryCacheManager.class.getName());
+        queryCacheManager.refreshUndoneTask();
+        logger.info("Finished cache refresh undone job.");
+    }
+}
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/conf/JobHistoryConfiguration.java
similarity index 65%
copy from linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java
copy to linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/conf/JobHistoryConfiguration.java
index 65d3633d2..5f588ec77 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/cache/QueryCacheManager.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/conf/JobHistoryConfiguration.java
@@ -15,15 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.linkis.jobhistory.cache;
+package org.apache.linkis.jobhistory.conf;
 
-import org.apache.linkis.jobhistory.cache.impl.UserTaskResultCache;
+import org.apache.linkis.common.conf.CommonVars;
 
-public interface QueryCacheManager {
+public class JobHistoryConfiguration {
+    public static CommonVars<Long> UNDONE_JOB_MINIMUM_ID =
+            CommonVars.apply("wds.linkis.jobhistory.undone.job.minimum.id", 0L);
 
-    UserTaskResultCache getCache(String user, String engineType);
-
-    void cleanAll();
-
-    void refreshAll();
+    public static CommonVars<String> UNDONE_JOB_REFRESH_TIME_DAILY =
+            CommonVars.apply("wds.linkis.jobhistory.undone.job.refreshtime.daily", "00:15");
 }
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/JobHistoryMapper.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/JobHistoryMapper.java
index 30d128d08..12214723e 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/JobHistoryMapper.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/JobHistoryMapper.java
@@ -33,6 +33,15 @@ public interface JobHistoryMapper {
     void updateJobHistory(JobHistory jobReq);
 
     List<JobHistory> search(
+            @Param("id") Long id,
+            @Param("umUser") String username,
+            @Param("status") List<String> status,
+            @Param("startDate") Date startDate,
+            @Param("endDate") Date endDate,
+            @Param("engineType") String engineType,
+            @Param("startId") Long startId);
+
+    List<JobHistory> searchWithIdOrderAsc(
             @Param("id") Long id,
             @Param("umUser") String username,
             @Param("status") List<String> status,
@@ -48,7 +57,8 @@ public interface JobHistoryMapper {
             @Param("status") List<String> status,
             @Param("startDate") Date startDate,
             @Param("endDate") Date endDate,
-            @Param("engineType") String engineType);
+            @Param("engineType") String engineType,
+            @Param("startId") Long startId);
 
     List<JobHistory> searchWithCreatorOnly(
             @Param("id") Long id,
@@ -58,7 +68,8 @@ public interface JobHistoryMapper {
             @Param("status") List<String> status,
             @Param("startDate") Date startDate,
             @Param("endDate") Date endDate,
-            @Param("engineType") String engineType);
+            @Param("engineType") String engineType,
+            @Param("startId") Long startId);
 
     String selectJobHistoryStatusForUpdate(Long jobId);
 }
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/impl/JobHistoryMapper.xml b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/impl/JobHistoryMapper.xml
index 037c90cf9..2a2823c1f 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/impl/JobHistoryMapper.xml
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/dao/impl/JobHistoryMapper.xml
@@ -88,10 +88,23 @@
             <if test="engineType != null">and engine_type = #{engineType}</if>
             <if test="startDate != null">and created_time >= #{startDate} AND created_time <![CDATA[<=]]> #{endDate}</if>
             <if test="status != null">and <foreach collection="status" item="element" close=")" separator="," open="status in (">#{element}</foreach></if>
+            <if test="startId != null">and id >= #{startId}</if>
         </where>
         ORDER BY linkis_ps_job_history_group_history.created_time DESC
     </select>
 
+    <select id="searchWithIdOrderAsc" useCache="true" resultMap="jobHistoryMap" >
+        /*slave*/ SELECT * FROM linkis_ps_job_history_group_history
+        <where>
+            <if test="id != null">id >= #{id}</if>
+            <if test="umUser != null">and submit_user = #{umUser}</if>
+            <if test="engineType != null">and engine_type = #{engineType}</if>
+            <if test="startDate != null">and created_time >= #{startDate} AND created_time <![CDATA[<=]]> #{endDate}</if>
+            <if test="status != null">and <foreach collection="status" item="element" close=")" separator="," open="status in (">#{element}</foreach></if>
+        </where>
+        ORDER BY linkis_ps_job_history_group_history.id
+    </select>
+
     <select id="searchWithUserCreator" useCache="true" resultMap="jobHistoryMap" >
         /*slave*/ SELECT * FROM linkis_ps_job_history_group_history
         <where>
@@ -103,6 +116,7 @@
             <if test="userCreatorKey != null and userCreatorValue != null">
                 and  LOCATE('"${userCreatorKey}":"${userCreatorValue}', labels) > 0
             </if>
+            <if test="startId != null">and id >= #{startId}</if>
         </where>
         ORDER BY linkis_ps_job_history_group_history.created_time DESC
     </select>
@@ -118,6 +132,7 @@
             <if test="userCreatorKey != null and creator != null">
                 and labels like '%"${userCreatorKey}":"%-${creator}%'
             </if>
+            <if test="startId != null">and id >= #{startId}</if>
         </where>
         ORDER BY linkis_ps_job_history_group_history.created_time DESC
     </select>
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/restful/api/QueryRestfulApi.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/restful/api/QueryRestfulApi.java
index 051d2758c..a6cb35752 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/restful/api/QueryRestfulApi.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/java/org/apache/linkis/jobhistory/restful/api/QueryRestfulApi.java
@@ -19,6 +19,7 @@ package org.apache.linkis.jobhistory.restful.api;
 
 import org.apache.linkis.governance.common.constant.job.JobRequestConstants;
 import org.apache.linkis.governance.common.entity.job.QueryException;
+import org.apache.linkis.jobhistory.cache.impl.DefaultQueryCacheManager;
 import org.apache.linkis.jobhistory.conf.JobhistoryConfiguration;
 import org.apache.linkis.jobhistory.conversions.TaskConversions;
 import org.apache.linkis.jobhistory.dao.JobDetailMapper;
@@ -53,6 +54,8 @@ public class QueryRestfulApi {
     @Autowired private JobHistoryQueryService jobHistoryQueryService;
     @Autowired private JobDetailMapper jobDetailMapper;
 
+    @Autowired private DefaultQueryCacheManager queryCacheManager;
+
     @RequestMapping(path = "/governanceStationAdmin", method = RequestMethod.GET)
     public Message governanceStationAdmin(HttpServletRequest req) {
         String username = ModuleUserUtils.getOperationUser(req, "governanceStationAdmin");
@@ -163,7 +166,8 @@ public class QueryRestfulApi {
                             creator,
                             sDate,
                             eDate,
-                            executeApplicationName);
+                            executeApplicationName,
+                            null);
         } finally {
             PageHelper.clearPage();
         }
@@ -190,4 +194,75 @@ public class QueryRestfulApi {
                 .data(TaskConstant.TASKS, vos)
                 .data(JobRequestConstants.TOTAL_PAGE(), total);
     }
+
+    /** Method list should not contain subjob, which may cause performance problems. */
+    @RequestMapping(path = "/listundone", method = RequestMethod.GET)
+    public Message listundone(
+            HttpServletRequest req,
+            @RequestParam(value = "startDate", required = false) Long startDate,
+            @RequestParam(value = "endDate", required = false) Long endDate,
+            @RequestParam(value = "status", required = false) String status,
+            @RequestParam(value = "pageNow", required = false) Integer pageNow,
+            @RequestParam(value = "pageSize", required = false) Integer pageSize,
+            @RequestParam(value = "startTaskID", required = false) Long taskID,
+            @RequestParam(value = "engineType", required = false) String engineType,
+            @RequestParam(value = "creator", required = false) String creator)
+            throws IOException, QueryException {
+        String username = SecurityFilter.getLoginUsername(req);
+        if (StringUtils.isEmpty(status)) {
+            status = "Running,Inited,Scheduled";
+        }
+        if (StringUtils.isEmpty(pageNow)) {
+            pageNow = 1;
+        }
+        if (StringUtils.isEmpty(pageSize)) {
+            pageSize = 20;
+        }
+        if (endDate == null) {
+            endDate = System.currentTimeMillis();
+        }
+        if (startDate == null) {
+            startDate = 0L;
+        }
+        if (StringUtils.isEmpty(creator)) {
+            creator = null;
+        }
+        Date sDate = new Date(startDate);
+        Date eDate = new Date(endDate);
+        if (sDate.getTime() == eDate.getTime()) {
+            Calendar instance = Calendar.getInstance();
+            instance.setTimeInMillis(endDate);
+            instance.add(Calendar.DAY_OF_MONTH, 1);
+            eDate = new Date(instance.getTime().getTime()); // todo check
+        }
+        List<JobHistory> queryTasks = null;
+        PageHelper.startPage(pageNow, pageSize);
+        try {
+            queryTasks =
+                    jobHistoryQueryService.search(
+                            taskID,
+                            username,
+                            status,
+                            creator,
+                            sDate,
+                            eDate,
+                            engineType,
+                            queryCacheManager.getUndoneTaskMinId());
+        } finally {
+            PageHelper.clearPage();
+        }
+
+        PageInfo<JobHistory> pageInfo = new PageInfo<>(queryTasks);
+        List<JobHistory> list = pageInfo.getList();
+        long total = pageInfo.getTotal();
+        List<QueryTaskVO> vos = new ArrayList<>();
+        for (JobHistory jobHistory : list) {
+            QueryUtils.exchangeExecutionCode(jobHistory);
+            QueryTaskVO taskVO = TaskConversions.jobHistory2TaskVO(jobHistory, null);
+            vos.add(taskVO);
+        }
+        return Message.ok()
+                .data(TaskConstant.TASKS, vos)
+                .data(JobRequestConstants.TOTAL_PAGE(), total);
+    }
 }
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/JobHistoryQueryService.java b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/JobHistoryQueryService.java
index fba45ac03..cd41a0f7f 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/JobHistoryQueryService.java
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/JobHistoryQueryService.java
@@ -38,7 +38,7 @@ public interface JobHistoryQueryService {
 
     JobHistory getJobHistoryByIdAndName(Long jobID, String userName);
 
-    List<JobHistory> search(Long jobId, String username, String creator, String status, Date sDate, Date eDate, String executionApplicationName);
+    List<JobHistory> search(Long jobId, String username, String creator, String status, Date sDate, Date eDate, String executionApplicationName, Long startJobId);
 
     JobHistory searchOne(Long jobId, Date sDate, Date eDate);
 
diff --git a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/impl/JobHistoryQueryServiceImpl.scala b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/impl/JobHistoryQueryServiceImpl.scala
index 08faaf360..c414df07f 100644
--- a/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/impl/JobHistoryQueryServiceImpl.scala
+++ b/linkis-public-enhancements/linkis-publicservice/linkis-jobhistory/src/main/scala/org/apache/linkis/jobhistory/service/impl/JobHistoryQueryServiceImpl.scala
@@ -214,14 +214,14 @@ class JobHistoryQueryServiceImpl extends JobHistoryQueryService with Logging {
     if (jobHistoryList.isEmpty) null else jobHistoryList.get(0)
   }
 
-  override def search(jobId: java.lang.Long, username: String, status: String, creator: String, sDate: Date, eDate: Date, engineType: String): util.List[JobHistory] = {
+  override def search(jobId: java.lang.Long, username: String, status: String, creator: String, sDate: Date, eDate: Date, engineType: String, startJobId: java.lang.Long): util.List[JobHistory] = {
     import scala.collection.JavaConversions._
     val split: util.List[String] = if (status != null) status.split(",").toList else null
     val result = if (StringUtils.isBlank(creator)) {
-      jobHistoryMapper.search(jobId, username, split, sDate, eDate, engineType)
+      jobHistoryMapper.search(jobId, username, split, sDate, eDate, engineType, startJobId)
     } else if(StringUtils.isBlank(username)) {
       val fakeLabel = new UserCreatorLabel
-      jobHistoryMapper.searchWithCreatorOnly(jobId, username, fakeLabel.getLabelKey, creator, split, sDate, eDate, engineType)
+      jobHistoryMapper.searchWithCreatorOnly(jobId, username, fakeLabel.getLabelKey, creator, split, sDate, eDate, engineType, startJobId)
     } else {
       val fakeLabel = new UserCreatorLabel
       fakeLabel.setUser(username)
@@ -231,7 +231,7 @@ class JobHistoryQueryServiceImpl extends JobHistoryQueryService with Logging {
         t => info("input user or creator is not correct", t)
           throw t
       }
-      jobHistoryMapper.searchWithUserCreator(jobId, username, fakeLabel.getLabelKey, userCreator, split, sDate, eDate, engineType)
+      jobHistoryMapper.searchWithUserCreator(jobId, username, fakeLabel.getLabelKey, userCreator, split, sDate, eDate, engineType, startJobId)
     }
     result
   }
@@ -251,7 +251,7 @@ class JobHistoryQueryServiceImpl extends JobHistoryQueryService with Logging {
 
   override def searchOne(jobId: lang.Long, sDate: Date, eDate: Date): JobHistory = {
     Iterables.getFirst(
-      jobHistoryMapper.search(jobId, null, null, sDate, eDate, null),
+      jobHistoryMapper.search(jobId, null, null, sDate, eDate, null, null),
       {
         val queryJobHistory = new QueryJobHistory
         queryJobHistory.setId(jobId)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org