diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/JobInfoConverter.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/JobInfoConverter.java index 189e0194e..7e73b403f 100644 --- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/JobInfoConverter.java +++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/JobInfoConverter.java @@ -18,6 +18,7 @@ package org.apache.kylin.engine.mr.common; +import java.util.HashMap; import java.util.Map; import org.apache.kylin.cube.model.CubeBuildTypeEnum; @@ -28,6 +29,7 @@ import org.apache.kylin.job.common.ShellExecutable; import org.apache.kylin.job.constant.JobStatusEnum; import org.apache.kylin.job.constant.JobStepStatusEnum; import org.apache.kylin.job.execution.AbstractExecutable; +import org.apache.kylin.job.execution.DefaultOutput; import org.apache.kylin.job.execution.ExecutableState; import org.apache.kylin.job.execution.Output; @@ -41,6 +43,9 @@ public class JobInfoConverter { Preconditions.checkState(job instanceof CubingJob, "illegal job type, id:" + job.getId()); CubingJob cubeJob = (CubingJob) job; Output output = outputs.get(job.getId()); + if (output == null){ + output = createDefaultOutput(); + } final JobInstance result = new JobInstance(); result.setName(job.getName()); result.setRelatedCube(CubingExecutableUtil.getCubeName(cubeJob.getParams())); @@ -56,11 +61,23 @@ public class JobInfoConverter { result.setDuration(AbstractExecutable.getDuration(result.getExecStartTime(), result.getExecEndTime()) / 1000); for (int i = 0; i < cubeJob.getTasks().size(); ++i) { AbstractExecutable task = cubeJob.getTasks().get(i); - result.addStep(parseToJobStep(task, i, outputs.get(task.getId()))); + Output stepOutput = outputs.get(task.getId()); + if (stepOutput == null){ + stepOutput = createDefaultOutput(); + } + result.addStep(parseToJobStep(task, i, stepOutput)); } return result; } + private static DefaultOutput createDefaultOutput() { + DefaultOutput defaultOutput = new DefaultOutput(); + defaultOutput.setLastModified(System.currentTimeMillis()); + defaultOutput.setState(ExecutableState.ERROR); + defaultOutput.setExtra(new HashMap()); + return defaultOutput; + } + public static JobInstance.JobStep parseToJobStep(AbstractExecutable task, int i, Output stepOutput) { Preconditions.checkNotNull(stepOutput); JobInstance.JobStep result = new JobInstance.JobStep();