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;
}
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;
}
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;
}
Aggregations