Search in sources :

Example 1 with ScheduleCorn

use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.

the class UpstreamDependencyHandler method getJobKey.

/**
 * 获得jobKey
 *
 * @param scheduleTaskShade 任务
 * @param currentDate 当前时间
 * @return jobKey
 */
public String getJobKey(ScheduleTaskShade scheduleTaskShade, Date currentDate) throws Exception {
    ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
    // 上一个周期
    Date lastDate = corn.isMatch(currentDate) ? currentDate : corn.last(currentDate);
    String lastDateStr = DateUtil.getDate(corn.isMatch(currentDate) ? currentDate : corn.last(currentDate), DateUtil.STANDARD_DATETIME_FORMAT);
    if (StringUtils.isBlank(lastDateStr)) {
        throw new RdosDefineException("no find upstream task of last cycle");
    }
    String jobKey = JobKeyUtils.generateJobKey(keyPreStr, scheduleTaskShade.getTaskId(), lastDateStr);
    return needCreateKey(lastDate, currentDate, jobKey);
}
Also used : RdosDefineException(com.dtstack.taier.common.exception.RdosDefineException) ScheduleCorn(com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn) Date(java.util.Date)

Example 2 with ScheduleCorn

use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.

the class ScheduleActionService method buildScheduleJob.

private ScheduleJob buildScheduleJob(ScheduleTaskShade batchTask, String jobId, String flowJobId) throws IOException, ParseException {
    String cycTime = getCycTime(0);
    String scheduleConf = batchTask.getScheduleConf();
    ScheduleJob scheduleJob = new ScheduleJob();
    scheduleJob.setJobId(jobId);
    scheduleJob.setJobName(CommonConstant.RUN_JOB_NAME + CommonConstant.RUN_DELIMITER + batchTask.getName() + CommonConstant.RUN_DELIMITER + cycTime);
    scheduleJob.setStatus(TaskStatus.ENGINEACCEPTED.getStatus());
    scheduleJob.setComputeType(batchTask.getComputeType());
    scheduleJob.setTenantId(batchTask.getTenantId());
    scheduleJob.setJobKey(String.format("%s%s%s", "tempJob", batchTask.getTaskId(), new DateTime().toString("yyyyMMdd")));
    scheduleJob.setTaskId(batchTask.getTaskId());
    scheduleJob.setCreateUserId(getOrDefault(batchTask.getCreateUserId(), -1L));
    scheduleJob.setType(EScheduleType.TEMP_JOB.getType());
    scheduleJob.setCycTime(getOrDefault(cycTime, DateTime.now().toString("yyyyMMddHHmmss")));
    if (StringUtils.isNotBlank(scheduleConf)) {
        Map jsonMap = objMapper.readValue(scheduleConf, Map.class);
        jsonMap.put("isFailRetry", false);
        scheduleConf = JSON.toJSONString(jsonMap);
        batchTask.setScheduleConf(scheduleConf);
        ScheduleCorn scheduleCron = ScheduleConfManager.parseFromJson(scheduleConf);
        ScheduleConf scheduleConfBean = scheduleCron.getScheduleConf();
        scheduleJob.setDependencyType(getOrDefault(scheduleConfBean.getSelfReliance(), 0));
        scheduleJob.setPeriodType(scheduleConfBean.getPeriodType());
        scheduleJob.setMaxRetryNum(getOrDefault(scheduleConfBean.getMaxRetryNum(), 0));
    }
    scheduleJob.setFlowJobId(getOrDefault(flowJobId, "0"));
    scheduleJob.setTaskType(getOrDefault(batchTask.getTaskType(), -2));
    scheduleJob.setNodeAddress(environmentContext.getLocalAddress());
    scheduleJob.setVersionId(getOrDefault(batchTask.getVersionId(), 0));
    scheduleJob.setComputeType(getOrDefault(batchTask.getComputeType(), ComputeType.BATCH.getType()));
    return scheduleJob;
}
Also used : ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) ScheduleConf(com.dtstack.taier.scheduler.server.builder.ScheduleConf) ScheduleCorn(com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn) DateTime(org.joda.time.DateTime)

Example 3 with ScheduleCorn

use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn in project Taier by DTStack.

the class UpstreamNextJobDependencyHandler method getJobKey.

private String getJobKey(ScheduleTaskShade scheduleTaskShade, Date currentDate) throws Exception {
    ScheduleCorn corn = ScheduleConfManager.parseFromJson(scheduleTaskShade.getScheduleConf());
    // 上游任务
    Date upstreamTask = corn.isMatch(currentDate) ? currentDate : corn.last(currentDate);
    // 上游任务的上一个周期
    Date lastDate = corn.last(upstreamTask);
    String lastDateStr = DateUtil.getDate(lastDate, DateUtil.STANDARD_DATETIME_FORMAT);
    if (StringUtils.isBlank(lastDateStr)) {
        throw new RdosDefineException("no find upstream task of last cycle");
    }
    String jobKey = JobKeyUtils.generateJobKey(keyPreStr, scheduleTaskShade.getTaskId(), lastDateStr);
    return needCreateKey(lastDate, currentDate, jobKey);
}
Also used : RdosDefineException(com.dtstack.taier.common.exception.RdosDefineException) ScheduleCorn(com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn) Date(java.util.Date)

Example 4 with ScheduleCorn

use of com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn 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)

Aggregations

ScheduleCorn (com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn)4 Date (java.util.Date)3 RdosDefineException (com.dtstack.taier.common.exception.RdosDefineException)2 ScheduleJob (com.dtstack.taier.dao.domain.ScheduleJob)2 ScheduleTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskShade)1 ScheduleJobDetails (com.dtstack.taier.scheduler.server.ScheduleJobDetails)1 ScheduleConf (com.dtstack.taier.scheduler.server.builder.ScheduleConf)1 DateTime (org.joda.time.DateTime)1