Search in sources :

Example 6 with ScheduleJobDetails

use of com.dtstack.taier.scheduler.server.ScheduleJobDetails in project Taier by DTStack.

the class CycleJobScheduler method listExecJob.

@Override
protected List<ScheduleJobDetails> listExecJob(Long startSort, String nodeAddress, Boolean isEq) {
    List<ScheduleJob> scheduleJobList = scheduleJobService.listCycleJob(startSort, nodeAddress, getScheduleType().getType(), isEq, JobPhaseStatus.CREATE.getCode());
    List<String> jobKeys = scheduleJobList.stream().map(ScheduleJob::getJobKey).collect(Collectors.toList());
    List<ScheduleJobJob> scheduleJobJobList = scheduleJobJobService.listByJobKeys(jobKeys);
    Map<String, List<ScheduleJobJob>> jobJobMap = scheduleJobJobList.stream().collect(Collectors.groupingBy(ScheduleJobJob::getJobKey));
    List<ScheduleJobDetails> scheduleJobDetailsList = new ArrayList<>(scheduleJobList.size());
    for (ScheduleJob scheduleJob : scheduleJobList) {
        ScheduleJobDetails scheduleJobDetails = new ScheduleJobDetails();
        scheduleJobDetails.setScheduleJob(scheduleJob);
        scheduleJobDetails.setJobJobList(jobJobMap.get(scheduleJob.getJobKey()));
        scheduleJobDetailsList.add(scheduleJobDetails);
    }
    return scheduleJobDetailsList;
}
Also used : ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) ScheduleJobJob(com.dtstack.taier.dao.domain.ScheduleJobJob) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List)

Example 7 with ScheduleJobDetails

use of com.dtstack.taier.scheduler.server.ScheduleJobDetails in project Taier by DTStack.

the class ScheduleJobService method insertJobList.

/**
 * 批量插入周期实例 jobSize 在负载均衡时 区分 scheduleType(正常调度 和 补数据)
 *
 * @param jobBuilderBeanCollection 实例集合
 * @param scheduleType 调度类型 正常调度 和 补数据
 */
@Transactional(rollbackFor = Exception.class)
public Long insertJobList(Collection<ScheduleJobDetails> jobBuilderBeanCollection, Integer scheduleType) {
    if (CollectionUtils.isEmpty(jobBuilderBeanCollection)) {
        return null;
    }
    Iterator<ScheduleJobDetails> batchJobIterator = jobBuilderBeanCollection.iterator();
    // count%20 为一批
    // 1: 批量插入BatchJob
    // 2: 批量插入BatchJobJobList
    int count = 0;
    int jobBatchSize = environmentContext.getBatchJobInsertSize();
    int jobJobBatchSize = environmentContext.getBatchJobJobInsertSize();
    Long minJobId = null;
    List<ScheduleJob> jobWaitForSave = Lists.newArrayList();
    List<ScheduleJobJob> jobJobWaitForSave = Lists.newArrayList();
    Map<String, Integer> nodeJobSize = computeJobSizeForNode(jobBuilderBeanCollection.size(), scheduleType);
    for (Map.Entry<String, Integer> nodeJobSizeEntry : nodeJobSize.entrySet()) {
        String nodeAddress = nodeJobSizeEntry.getKey();
        int nodeSize = nodeJobSizeEntry.getValue();
        final int finalBatchNodeSize = nodeSize;
        while (nodeSize > 0 && batchJobIterator.hasNext()) {
            nodeSize--;
            count++;
            ScheduleJobDetails jobBuilderBean = batchJobIterator.next();
            ScheduleJob scheduleJob = jobBuilderBean.getScheduleJob();
            scheduleJob.setNodeAddress(nodeAddress);
            jobWaitForSave.add(scheduleJob);
            jobJobWaitForSave.addAll(jobBuilderBean.getJobJobList());
            LOGGER.debug("insertJobList count:{} batchJobs:{} finalBatchNodeSize:{}", count, jobBuilderBeanCollection.size(), finalBatchNodeSize);
            if (count % jobBatchSize == 0 || count == (jobBuilderBeanCollection.size() - 1) || jobJobWaitForSave.size() > jobJobBatchSize) {
                minJobId = persistJobs(jobWaitForSave, jobJobWaitForSave, minJobId, jobJobBatchSize);
                LOGGER.info("insertJobList count:{} batchJobs:{} finalBatchNodeSize:{} jobJobSize:{}", count, jobBuilderBeanCollection.size(), finalBatchNodeSize, jobJobWaitForSave.size());
            }
        }
        LOGGER.info("insertJobList count:{} batchJobs:{} finalBatchNodeSize:{}", count, jobBuilderBeanCollection.size(), finalBatchNodeSize);
        // 结束前persist一次,flush所有jobs
        minJobId = persistJobs(jobWaitForSave, jobJobWaitForSave, minJobId, jobJobBatchSize);
    }
    return minJobId;
}
Also used : ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) Transactional(org.springframework.transaction.annotation.Transactional)

Example 8 with ScheduleJobDetails

use of com.dtstack.taier.scheduler.server.ScheduleJobDetails in project Taier by DTStack.

the class OperatorRecordJobScheduler method listExecJob.

@Override
protected List<ScheduleJobDetails> listExecJob(Long startSort, String nodeAddress, Boolean isEq) {
    List<ScheduleJobOperatorRecord> records = scheduleJobOperatorRecordService.listOperatorRecord(startSort, nodeAddress, getOperatorType().getType(), isEq);
    if (CollectionUtils.isNotEmpty(records)) {
        Set<String> jobIds = records.stream().map(ScheduleJobOperatorRecord::getJobId).collect(Collectors.toSet());
        List<ScheduleJob> scheduleJobList = getScheduleJob(jobIds);
        if (CollectionUtils.isNotEmpty(scheduleJobList)) {
            List<String> jodExecIds = scheduleJobList.stream().map(ScheduleJob::getJobId).collect(Collectors.toList());
            if (jobIds.size() != scheduleJobList.size()) {
                // 过滤出来已经提交运行的实例,删除操作记录
                List<String> deleteJobIdList = jobIds.stream().filter(jobId -> !jodExecIds.contains(jobId)).collect(Collectors.toList());
                removeOperatorRecord(deleteJobIdList);
            }
            List<String> jobKeys = scheduleJobList.stream().map(ScheduleJob::getJobKey).collect(Collectors.toList());
            List<ScheduleJobJob> scheduleJobJobList = scheduleJobJobService.listByJobKeys(jobKeys);
            Map<String, List<ScheduleJobJob>> jobJobMap = scheduleJobJobList.stream().collect(Collectors.groupingBy(ScheduleJobJob::getJobKey));
            List<ScheduleJobDetails> scheduleJobDetailsList = new ArrayList<>(scheduleJobList.size());
            for (ScheduleJob scheduleJob : scheduleJobList) {
                ScheduleJobDetails scheduleJobDetails = new ScheduleJobDetails();
                scheduleJobDetails.setScheduleJob(scheduleJob);
                scheduleJobDetails.setJobJobList(jobJobMap.get(scheduleJob.getJobKey()));
                scheduleJobDetailsList.add(scheduleJobDetails);
            }
            return scheduleJobDetailsList;
        } else {
            removeOperatorRecord(Lists.newArrayList(jobIds));
        }
    }
    return Lists.newArrayList();
}
Also used : java.util(java.util) ScheduleJobJobService(com.dtstack.taier.scheduler.service.ScheduleJobJobService) Logger(org.slf4j.Logger) ScheduleJobOperatorRecord(com.dtstack.taier.dao.domain.ScheduleJobOperatorRecord) ScheduleJobService(com.dtstack.taier.scheduler.service.ScheduleJobService) ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) JudgeJobExecOperator(com.dtstack.taier.scheduler.server.scheduler.exec.JudgeJobExecOperator) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) ScheduleJobOperatorRecordService(com.dtstack.taier.scheduler.service.ScheduleJobOperatorRecordService) Collectors(java.util.stream.Collectors) Lists(com.google.common.collect.Lists) ScheduleJobCacheService(com.dtstack.taier.scheduler.service.ScheduleJobCacheService) CollectionUtils(org.apache.commons.collections.CollectionUtils) ScheduleEngineJobCache(com.dtstack.taier.dao.domain.ScheduleEngineJobCache) ScheduleJobJob(com.dtstack.taier.dao.domain.ScheduleJobJob) ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) Deleted(com.dtstack.taier.common.enums.Deleted) OperatorType(com.dtstack.taier.common.enums.OperatorType) TaskStatus(com.dtstack.taier.pluginapi.enums.TaskStatus) ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) ScheduleJobJob(com.dtstack.taier.dao.domain.ScheduleJobJob) ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) ScheduleJobOperatorRecord(com.dtstack.taier.dao.domain.ScheduleJobOperatorRecord)

Example 9 with ScheduleJobDetails

use of com.dtstack.taier.scheduler.server.ScheduleJobDetails in project Taier by DTStack.

the class AbstractJobBuilder method buildJob.

@Override
public List<ScheduleJobDetails> buildJob(ScheduleTaskShade scheduleTaskShade, String name, String triggerDay, String beginTime, String endTime, Long fillId, JobSortWorker jobSortWorker) throws Exception {
    // 解析周期信息
    ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
    ScheduleConf scheduleConf = corn.getScheduleConf();
    // 校验时间是否符合规范,且获得时间范围
    Pair<Date, Date> triggerRange = getTriggerRange(triggerDay, beginTime, endTime);
    // 获得实例命中的实际范围
    Date startDate = getStartData(scheduleConf, triggerRange, scheduleTaskShade.getTaskId());
    Date endDate = getEndDate(scheduleConf, triggerRange, scheduleTaskShade.getTaskId());
    List<ScheduleJobDetails> jobBuilderBeanList = Lists.newArrayList();
    Date next = corn.isMatch(startDate) ? startDate : corn.next(startDate);
    while (next != null) {
        // 如下下一次执行时间已经在结束时间之后,停止生成实例
        if (next.after(endDate)) {
            break;
        }
        ScheduleJobDetails jobBuilderBean = buildJobBuilderBean(scheduleTaskShade, name, fillId, jobSortWorker, corn, scheduleConf, next, NORMAL_TASK_FLOW_ID);
        if (EScheduleJobType.WORK_FLOW.getVal().equals(scheduleTaskShade.getTaskType())) {
            // 该任务是工作流任务 先生成子任务
            List<ScheduleTaskShade> subTasks = scheduleTaskService.lambdaQuery().eq(ScheduleTaskShade::getFlowId, scheduleTaskShade.getTaskId()).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
            List<ScheduleJobDetails> flowBean = Lists.newArrayList();
            ScheduleJob scheduleJob = jobBuilderBean.getScheduleJob();
            for (ScheduleTaskShade subTask : subTasks) {
                flowBean.add(buildJobBuilderBean(subTask, name, fillId, jobSortWorker, corn, scheduleConf, next, scheduleJob.getJobId()));
            }
            jobBuilderBean.setFlowBean(flowBean);
        }
        jobBuilderBeanList.add(jobBuilderBean);
        next = corn.next(next);
    }
    return jobBuilderBeanList;
}
Also used : ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) ScheduleCorn(com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn) Date(java.util.Date) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade)

Example 10 with ScheduleJobDetails

use of com.dtstack.taier.scheduler.server.ScheduleJobDetails in project Taier by DTStack.

the class AbstractJobBuilder method buildJobBuilderBean.

/**
 * 构建JobBuilderBean
 *
 * @param scheduleTaskShade 需要被构建的任务
 * @param name 实例名称
 * @param fillId 补数据id
 * @param jobSortWorker 排序器
 * @param corn 周期实例
 * @param scheduleConf 调度配置
 * @param currentData 当前时间
 * @return
 */
private ScheduleJobDetails buildJobBuilderBean(ScheduleTaskShade scheduleTaskShade, String name, Long fillId, JobSortWorker jobSortWorker, ScheduleCorn corn, ScheduleConf scheduleConf, Date currentData, String flowJobId) {
    String triggerTime = DateUtil.getDate(currentData, DateUtil.STANDARD_DATETIME_FORMAT);
    String cycTime = DateUtil.getTimeStrWithoutSymbol(triggerTime);
    String jobKey = JobKeyUtils.generateJobKey(getKeyPreStr(name), scheduleTaskShade.getTaskId(), cycTime);
    // 实例
    ScheduleJob scheduleJob = new ScheduleJob();
    scheduleJob.setTenantId(scheduleTaskShade.getTenantId());
    scheduleJob.setJobId(actionService.generateUniqueSign());
    scheduleJob.setJobKey(jobKey);
    scheduleJob.setJobName(getName(scheduleTaskShade, name, cycTime));
    scheduleJob.setTaskId(scheduleTaskShade.getTaskId());
    scheduleJob.setCreateUserId(scheduleTaskShade.getCreateUserId());
    scheduleJob.setIsDeleted(Deleted.NORMAL.getStatus());
    scheduleJob.setType(getType());
    scheduleJob.setIsRestart(Restarted.NORMAL.getStatus());
    scheduleJob.setCycTime(cycTime);
    scheduleJob.setDependencyType(scheduleConf.getSelfReliance());
    scheduleJob.setFlowJobId(flowJobId);
    scheduleJob.setPeriodType(scheduleConf.getPeriodType());
    scheduleJob.setStatus(TaskStatus.UNSUBMIT.getStatus());
    scheduleJob.setTaskType(scheduleTaskShade.getTaskType());
    scheduleJob.setFillId(fillId);
    scheduleJob.setMaxRetryNum(scheduleConf.getMaxRetryNum());
    scheduleJob.setVersionId(scheduleTaskShade.getVersionId());
    scheduleJob.setComputeType(scheduleTaskShade.getComputeType());
    scheduleJob.setNextCycTime(DateUtil.getDate(corn.next(currentData), DateUtil.STANDARD_DATETIME_FORMAT));
    scheduleJob.setJobExecuteOrder(JobExecuteOrderUtil.buildJobExecuteOrder(cycTime, jobSortWorker.getSort()));
    // 获得依赖
    List<ScheduleJobJob> jobJobList = Lists.newArrayList();
    DependencyHandler dependencyHandler = dependencyManager.getDependencyHandler(getKeyPreStr(name), scheduleTaskShade, corn);
    while (dependencyHandler != null) {
        jobJobList.addAll(dependencyHandler.generationJobJobForTask(corn, currentData, jobKey));
        dependencyHandler = dependencyHandler.next();
    }
    ScheduleJobDetails jobBuilderBean = new ScheduleJobDetails();
    jobBuilderBean.setJobJobList(jobJobList);
    jobBuilderBean.setScheduleJob(scheduleJob);
    return jobBuilderBean;
}
Also used : ScheduleJobDetails(com.dtstack.taier.scheduler.server.ScheduleJobDetails) ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) DependencyHandler(com.dtstack.taier.scheduler.server.builder.dependency.DependencyHandler) ScheduleJobJob(com.dtstack.taier.dao.domain.ScheduleJobJob)

Aggregations

ScheduleJobDetails (com.dtstack.taier.scheduler.server.ScheduleJobDetails)13 ScheduleJob (com.dtstack.taier.dao.domain.ScheduleJob)9 ScheduleTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskShade)5 Deleted (com.dtstack.taier.common.enums.Deleted)4 ScheduleJobJob (com.dtstack.taier.dao.domain.ScheduleJobJob)4 Collectors (java.util.stream.Collectors)4 CollectionUtils (org.apache.commons.collections.CollectionUtils)4 Logger (org.slf4j.Logger)4 LoggerFactory (org.slf4j.LoggerFactory)4 Autowired (org.springframework.beans.factory.annotation.Autowired)4 TaskStatus (com.dtstack.taier.pluginapi.enums.TaskStatus)3 ScheduleJobService (com.dtstack.taier.scheduler.service.ScheduleJobService)3 List (java.util.List)3 Transactional (org.springframework.transaction.annotation.Transactional)3 EScheduleType (com.dtstack.taier.common.enums.EScheduleType)2 JobCheckStatus (com.dtstack.taier.common.enums.JobCheckStatus)2 OperatorType (com.dtstack.taier.common.enums.OperatorType)2 ScheduleJobOperatorRecord (com.dtstack.taier.dao.domain.ScheduleJobOperatorRecord)2 JudgeJobExecOperator (com.dtstack.taier.scheduler.server.scheduler.exec.JudgeJobExecOperator)2 ScheduleJobOperatorRecordService (com.dtstack.taier.scheduler.service.ScheduleJobOperatorRecordService)2