From 71b27cc2e2d49a95524b6181805d317977ea2bf3 Mon Sep 17 00:00:00 2001 From: 10069681 Date: Thu, 1 Jun 2017 20:11:01 +0800 Subject: [PATCH 1/1] KYLIN-2655 There are some minor problems with the duration of the job when resuming the error job or stopped job. --- .../main/java/org/apache/kylin/job/JobInstance.java | 16 ++++++++++++++++ .../kylin/job/execution/AbstractExecutable.java | 21 +++++++++++++++++---- .../job/execution/DefaultChainedExecutable.java | 12 ++++++++++-- .../kylin/engine/mr/common/JobInfoConverter.java | 3 ++- .../org/apache/kylin/tool/JobInstanceExtractor.java | 3 ++- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/core-job/src/main/java/org/apache/kylin/job/JobInstance.java b/core-job/src/main/java/org/apache/kylin/job/JobInstance.java index 8dcdff676..377883419 100644 --- a/core-job/src/main/java/org/apache/kylin/job/JobInstance.java +++ b/core-job/src/main/java/org/apache/kylin/job/JobInstance.java @@ -58,6 +58,8 @@ public class JobInstance extends RootPersistentEntity implements Comparable info = Maps.newHashMap(); - info.put(START_TIME, Long.toString(System.currentTimeMillis())); final long startTime = getStartTime(); if (startTime > 0) { - getManager().updateJobOutput(getId(), ExecutableState.RUNNING, null, null); + final long endTime = getEndTime(); + if (endTime > 0) { + long interruptTime = System.currentTimeMillis() - endTime + getInterruptTime(); + info.put(START_TIME, Long.toString(startTime)); + info.put(INTERRUPT_TIME, Long.toString(interruptTime)); + getManager().updateJobOutput(getId(), ExecutableState.RUNNING, info, null); + } else { + getManager().updateJobOutput(getId(), ExecutableState.RUNNING, null, null); + } } else { + info.put(START_TIME, Long.toString(System.currentTimeMillis())); getManager().updateJobOutput(getId(), ExecutableState.RUNNING, info, null); } } 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..c465e3f78 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 @@ -53,7 +53,8 @@ public class JobInfoConverter { result.setMrWaiting(AbstractExecutable.getExtraInfoAsLong(output, CubingJob.MAP_REDUCE_WAIT_TIME, 0L) / 1000); result.setExecStartTime(AbstractExecutable.getStartTime(output)); result.setExecEndTime(AbstractExecutable.getEndTime(output)); - result.setDuration(AbstractExecutable.getDuration(result.getExecStartTime(), result.getExecEndTime()) / 1000); + result.setExecInterruptTime(AbstractExecutable.getInterruptTime(output)); + result.setDuration(AbstractExecutable.getDuration(result.getExecStartTime(), result.getExecEndTime(), result.getExecInterruptTime()) / 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()))); diff --git a/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java b/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java index 068dbda4f..52fd0a0f0 100644 --- a/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java @@ -135,7 +135,8 @@ public class JobInstanceExtractor extends AbstractInfoExtractor { result.setMrWaiting(AbstractExecutable.getExtraInfoAsLong(output, CubingJob.MAP_REDUCE_WAIT_TIME, 0L) / 1000); result.setExecStartTime(AbstractExecutable.getStartTime(output)); result.setExecEndTime(AbstractExecutable.getEndTime(output)); - result.setDuration(AbstractExecutable.getDuration(AbstractExecutable.getStartTime(output), AbstractExecutable.getEndTime(output)) / 1000); + result.setExecInterruptTime(AbstractExecutable.getInterruptTime(output)); + result.setDuration(AbstractExecutable.getDuration(AbstractExecutable.getStartTime(output), AbstractExecutable.getEndTime(output), AbstractExecutable.getInterruptTime(output)) / 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()))); -- 2.11.0.windows.1