Search in sources :

Example 1 with ScheduleConf

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

the class DependencyManager method getDependencyHandler.

/**
 * 获得依赖处理器链
 *
 * @param keyPreStr        前缀
 * @param currentTaskShade 任务
 * @param corn             执行周期
 * @return 依赖处理器链
 */
public DependencyHandler getDependencyHandler(String keyPreStr, ScheduleTaskShade currentTaskShade, ScheduleCorn corn) {
    // 查询上游任务
    List<ScheduleTaskTaskShade> scheduleTaskTaskShadeList = scheduleTaskTaskService.lambdaQuery().eq(ScheduleTaskTaskShade::getTaskId, currentTaskShade.getTaskId()).eq(ScheduleTaskTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
    DependencyHandler dependencyHandler = null;
    List<Long> parentTaskIds = scheduleTaskTaskShadeList.stream().map(ScheduleTaskTaskShade::getParentTaskId).collect(Collectors.toList());
    // 如果没有上游任务,就不需要UpstreamDependencyHandler
    List<ScheduleTaskShade> taskShadeList = null;
    if (CollectionUtils.isNotEmpty(parentTaskIds)) {
        // 查询任务
        taskShadeList = scheduleTaskService.lambdaQuery().in(ScheduleTaskShade::getTaskId, parentTaskIds).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
        if (CollectionUtils.isNotEmpty(taskShadeList)) {
            dependencyHandler = new UpstreamDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService);
        }
    }
    // 判断是否设置自依赖
    ScheduleConf scheduleConf = corn.getScheduleConf();
    if (DependencyType.SELF_DEPENDENCY_SUCCESS.getType().equals(scheduleConf.getSelfReliance()) || DependencyType.SELF_DEPENDENCY_END.getType().equals(scheduleConf.getSelfReliance())) {
        if (dependencyHandler == null) {
            dependencyHandler = new SelfRelianceDependencyHandler(keyPreStr, currentTaskShade, scheduleJobService);
        } else {
            dependencyHandler.setNext(new SelfRelianceDependencyHandler(keyPreStr, currentTaskShade, scheduleJobService));
        }
    } else if (DependencyType.PRE_PERIOD_CHILD_DEPENDENCY_SUCCESS.getType().equals(scheduleConf.getSelfReliance()) || DependencyType.PRE_PERIOD_CHILD_DEPENDENCY_END.getType().equals(scheduleConf.getSelfReliance())) {
        if (CollectionUtils.isNotEmpty(taskShadeList)) {
            if (dependencyHandler == null) {
                dependencyHandler = new UpstreamNextJobDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService);
            } else {
                dependencyHandler.setNext(new UpstreamNextJobDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService));
            }
        }
    }
    return dependencyHandler;
}
Also used : ScheduleConf(com.dtstack.taier.scheduler.server.builder.ScheduleConf) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade)

Example 2 with ScheduleConf

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

the class ScheduleConfManager method parseFromJson.

public static ScheduleCorn parseFromJson(String scheduleConf) throws IOException, ParseException {
    ScheduleConf scheduleConfBean = JSON.parseObject(scheduleConf, ScheduleConf.class);
    // 校验必要参数
    checkConf(scheduleConf, scheduleConfBean);
    // 获得对应的corn表达式
    int periodType = scheduleConfBean.getPeriodType();
    IScheduleConfParser scheduleCron;
    if (periodType == ESchedulePeriodType.MONTH.getVal()) {
        scheduleCron = new ScheduleCronMonthParser();
    } else if (periodType == ESchedulePeriodType.WEEK.getVal()) {
        scheduleCron = new ScheduleCronWeekParser();
    } else if (periodType == ESchedulePeriodType.DAY.getVal()) {
        scheduleCron = new ScheduleCronDayParser();
    } else if (periodType == ESchedulePeriodType.HOUR.getVal()) {
        scheduleCron = new ScheduleCronHourParser();
    } else if (periodType == ESchedulePeriodType.MIN.getVal()) {
        scheduleCron = new ScheduleCronMinParser();
    } else if (periodType == ESchedulePeriodType.CUSTOM.getVal()) {
        scheduleCron = new ScheduleCronCustomParser();
    } else {
        throw new RdosDefineException("not support period type!");
    }
    String cron = scheduleCron.parse(scheduleConfBean);
    // 返回corn对象
    ScheduleCorn corn = new ScheduleCorn();
    corn.setScheduleConf(scheduleConfBean);
    corn.setCron(cron);
    return corn;
}
Also used : ScheduleConf(com.dtstack.taier.scheduler.server.builder.ScheduleConf) RdosDefineException(com.dtstack.taier.common.exception.RdosDefineException)

Example 3 with ScheduleConf

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

Aggregations

ScheduleConf (com.dtstack.taier.scheduler.server.builder.ScheduleConf)3 RdosDefineException (com.dtstack.taier.common.exception.RdosDefineException)1 ScheduleJob (com.dtstack.taier.dao.domain.ScheduleJob)1 ScheduleTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskShade)1 ScheduleTaskTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskTaskShade)1 ScheduleCorn (com.dtstack.taier.scheduler.server.builder.cron.ScheduleCorn)1 DateTime (org.joda.time.DateTime)1