Search in sources :

Example 11 with JobResult

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;
        }
    }
}
Also used : ScheduleJob(com.dtstack.taier.dao.domain.ScheduleJob) ParamAction(com.dtstack.taier.pluginapi.pojo.ParamAction) JobResult(com.dtstack.taier.pluginapi.pojo.JobResult) JobClient(com.dtstack.taier.pluginapi.JobClient) ScheduleEngineJobCache(com.dtstack.taier.dao.domain.ScheduleEngineJobCache)

Example 12 with JobResult

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());
            }
        }
    }
}
Also used : JSONObject(com.alibaba.fastjson.JSONObject) JobResult(com.dtstack.taier.pluginapi.pojo.JobResult) JobClient(com.dtstack.taier.pluginapi.JobClient)

Aggregations

JobResult (com.dtstack.taier.pluginapi.pojo.JobResult)12 JobClient (com.dtstack.taier.pluginapi.JobClient)4 JobIdentifier (com.dtstack.taier.pluginapi.JobIdentifier)3 EJobType (com.dtstack.taier.pluginapi.enums.EJobType)3 PluginDefineException (com.dtstack.taier.pluginapi.exception.PluginDefineException)3 Test (org.junit.Test)3 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)3 ParamAction (com.dtstack.taier.pluginapi.pojo.ParamAction)2 RdbsExeQueue (com.dtstack.taier.rdbs.common.executor.RdbsExeQueue)2 IOException (java.io.IOException)2 YarnException (org.apache.hadoop.yarn.exceptions.YarnException)2 JSONObject (com.alibaba.fastjson.JSONObject)1 ClientAccessException (com.dtstack.taier.common.exception.ClientAccessException)1 RdosDefineException (com.dtstack.taier.common.exception.RdosDefineException)1 WorkerAccessException (com.dtstack.taier.common.exception.WorkerAccessException)1 ScheduleEngineJobCache (com.dtstack.taier.dao.domain.ScheduleEngineJobCache)1 ScheduleJob (com.dtstack.taier.dao.domain.ScheduleJob)1 ClusterMode (com.dtstack.taier.flink.base.enums.ClusterMode)1 JobParam (com.dtstack.taier.pluginapi.JobParam)1 IClient (com.dtstack.taier.pluginapi.client.IClient)1