use of com.dtstack.taier.pluginapi.pojo.JobResult in project Taier by DTStack.
the class JobStopDealer method stopJob.
private StoppedStatus stopJob(JobElement jobElement) throws Exception {
ScheduleEngineJobCache jobCache = engineJobCacheService.getByJobId(jobElement.jobId);
ScheduleJob scheduleJob = scheduleJobService.lambdaQuery().eq(ScheduleJob::getJobId, jobElement.jobId).eq(ScheduleJob::getIsDeleted, Deleted.NORMAL.getStatus()).one();
if (jobCache == null) {
if (scheduleJob != null && TaskStatus.isStopped(scheduleJob.getStatus())) {
LOGGER.info("jobId:{} stopped success, set job is STOPPED.", jobElement.jobId);
return StoppedStatus.STOPPED;
} else {
this.removeMemStatusAndJobCache(jobElement.jobId);
LOGGER.info("jobId:{} jobCache is null, set job is MISSED.", jobElement.jobId);
return StoppedStatus.MISSED;
}
} else if (null != scheduleJob && EJobCacheStage.unSubmitted().contains(jobCache.getStage())) {
if (!TaskStatus.getWaitStatus().contains(scheduleJob.getStatus()) || EJobCacheStage.PRIORITY.getStage() != jobCache.getStage()) {
this.removeMemStatusAndJobCache(jobCache.getJobId());
LOGGER.info("jobId:{} is unsubmitted, set job is STOPPED.", jobElement.jobId);
return StoppedStatus.STOPPED;
} else {
// 任务如果处于提交的状态过程中 但是stage由PRIORITY变更为SUBMITTED 直接删除会导致还是会提交到yarn上 占用资源
LOGGER.info("jobId:{} is stopping.", jobCache.getJobId());
return StoppedStatus.STOPPING;
}
} else {
if (scheduleJob == null) {
this.removeMemStatusAndJobCache(jobElement.jobId);
LOGGER.info("jobId:{} scheduleJob is null, set job is MISSED.", jobElement.jobId);
return StoppedStatus.MISSED;
} else if (TaskStatus.getStoppedAndNotFound().contains(scheduleJob.getStatus())) {
this.removeMemStatusAndJobCache(jobElement.jobId);
LOGGER.info("jobId:{} and status:{} is StoppedAndNotFound, set job is STOPPED.", jobElement.jobId, scheduleJob.getStatus());
return StoppedStatus.STOPPED;
}
ParamAction paramAction = PublicUtil.jsonStrToObject(jobCache.getJobInfo(), ParamAction.class);
paramAction.setEngineTaskId(scheduleJob.getEngineJobId());
paramAction.setApplicationId(scheduleJob.getApplicationId());
JobClient jobClient = new JobClient(paramAction);
jobClient.setForceCancel(jobElement.isForceCancel);
if (StringUtils.isNotBlank(scheduleJob.getEngineJobId()) && !jobClient.getEngineTaskId().equals(scheduleJob.getEngineJobId())) {
this.removeMemStatusAndJobCache(jobElement.jobId);
LOGGER.info("jobId:{} stopped success, because of [difference engineJobId].", paramAction.getJobId());
return StoppedStatus.STOPPED;
}
JobResult jobResult = workerOperator.stopJob(jobClient);
if (jobResult.getCheckRetry()) {
LOGGER.info("jobId:{} is retry.", paramAction.getJobId());
return StoppedStatus.RETRY;
} else {
LOGGER.info("jobId:{} is stopping.", paramAction.getJobId());
return StoppedStatus.STOPPING;
}
}
}
use of com.dtstack.taier.pluginapi.pojo.JobResult in project Taier by DTStack.
the class JobSubmittedDealer method run.
@Override
public void run() {
while (true) {
JobClient jobClient = null;
try {
jobClient = queue.take();
if (jobRestartDealer.checkAndRestartForSubmitResult(jobClient)) {
LOGGER.warn("failed submit job restarting, jobId:{} jobResult:{} ...", jobClient.getJobId(), jobClient.getJobResult());
continue;
}
LOGGER.info("success submit job to Engine, jobId:{} jobResult:{} ...", jobClient.getJobId(), jobClient.getJobResult());
// 存储执行日志
if (StringUtils.isNotBlank(jobClient.getEngineTaskId()) || StringUtils.isNotBlank(jobClient.getApplicationId())) {
JobResult jobResult = jobClient.getJobResult();
String appId = jobResult.getData(JobResult.JOB_ID_KEY);
JSONObject jobExtraInfo = jobResult.getExtraInfoJson();
jobExtraInfo.put(JobResultConstant.JOB_GRAPH, JobGraphUtil.formatJSON(appId, jobExtraInfo.getString(JobResultConstant.JOB_GRAPH), jobClient.getComputeType()));
scheduleJobService.updateJobSubmitSuccess(jobClient.getJobId(), jobClient.getEngineTaskId(), appId);
jobDealer.updateCache(jobClient, EJobCacheStage.SUBMITTED.getStage());
jobClient.doStatusCallBack(TaskStatus.SUBMITTED.getStatus());
JobClient finalJobClient = jobClient;
shardCache.updateLocalMemTaskStatus(jobClient.getJobId(), TaskStatus.SUBMITTED.getStatus(), (jobId) -> {
LOGGER.warn("success submit job to Engine, jobId:{} jobResult:{} but shareManager is not found ...", jobId, finalJobClient.getJobResult());
finalJobClient.doStatusCallBack(TaskStatus.CANCELED.getStatus());
});
} else {
jobClientFail(jobClient.getJobId(), jobClient.getJobResult().getJsonStr());
}
} catch (Throwable e) {
LOGGER.error("jobId submitted {} jobStatus dealer run error", null == jobClient ? "" : jobClient.getJobId(), e);
if (null != jobClient) {
jobClientFail(jobClient.getJobId(), JobResult.createErrorResult(e).getJsonStr());
}
}
}
}
Aggregations