This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 168fa86 Add built instance in Job info 168fa86 is described below commit 168fa86ebe8bbd09642f894da0312ebc623f1ada Author: Liu Shaohui <liushao...@xiaomi.com> AuthorDate: Fri Jan 11 13:43:32 2019 +0800 Add built instance in Job info Summary: Ref T13014 Reviewers: zhangxu16, wubin1, hubei Reviewed By: zhangxu16, wubin1 Subscribers: cloud-computing Maniphest Tasks: T13014 Differential Revision: https://phabricator.d.xiaomi.net/D135075 --- .../org/apache/kylin/common/lock/DistributedLockFactory.java | 2 +- core-job/src/main/java/org/apache/kylin/job/JobInstance.java | 11 +++++++++++ .../org/apache/kylin/job/execution/AbstractExecutable.java | 9 +++++++++ .../apache/kylin/job/execution/DefaultChainedExecutable.java | 6 ++++-- .../org/apache/kylin/job/execution/ExecutableManager.java | 2 +- .../org/apache/kylin/engine/mr/common/JobInfoConverter.java | 2 ++ .../main/java/org/apache/kylin/rest/service/JobService.java | 7 ++++++- .../main/java/org/apache/kylin/tool/JobInstanceExtractor.java | 1 + webapp/app/partials/jobs/job_steps.html | 4 ++++ 9 files changed, 39 insertions(+), 5 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLockFactory.java b/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLockFactory.java index e03d0e8..05597e8 100644 --- a/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLockFactory.java +++ b/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLockFactory.java @@ -37,7 +37,7 @@ public abstract class DistributedLockFactory { return Thread.currentThread().getId() + "-" + processAndHost(); } - private static String processAndHost() { + public static String processAndHost() { byte[] bytes = ManagementFactory.getRuntimeMXBean().getName().getBytes(StandardCharsets.UTF_8); return new String(bytes, StandardCharsets.UTF_8); } 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 a2c3459..ef649ab 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 @@ -72,6 +72,8 @@ public class JobInstance extends RootPersistentEntity implements Comparable<JobI private String submitter; @JsonProperty("job_status") private JobStatusEnum status; + @JsonProperty("build_instance") + private String buildInstance; public JobStep getRunningStep() { for (JobStep step : this.getSteps()) { @@ -289,6 +291,14 @@ public class JobInstance extends RootPersistentEntity implements Comparable<JobI this.submitter = submitter; } + public String getBuildInstance() { + return buildInstance; + } + + public void setBuildInstance(String buildInstance) { + this.buildInstance = buildInstance; + } + @JsonIgnoreProperties(ignoreUnknown = true) public static class JobStep implements Comparable<JobStep> { @@ -451,6 +461,7 @@ public class JobInstance extends RootPersistentEntity implements Comparable<JobI this.runAsync = runAsync; } + /** * @return the jobInstance */ diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java index 8548781..e808084 100644 --- a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java +++ b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java @@ -55,6 +55,7 @@ public abstract class AbstractExecutable implements Executable, Idempotent { protected static final String START_TIME = "startTime"; protected static final String END_TIME = "endTime"; protected static final String INTERRUPT_TIME = "interruptTime"; + protected static final String BUILD_INSTANCE = "buildInstance"; protected static final Logger logger = LoggerFactory.getLogger(AbstractExecutable.class); public static final String NO_NEED_TO_SEND_EMAIL_USER_LIST_IS_EMPTY = "no need to send email, user list is empty"; @@ -375,6 +376,14 @@ public abstract class AbstractExecutable implements Executable, Idempotent { return getExtraInfoAsLong(getOutput(), key, defaultValue); } + public static String getBuildInstance(Output output) { + final String str = output.getExtra().get(BUILD_INSTANCE); + if (str != null) { + return str; + } + return "unknown"; + } + public static long getStartTime(Output output) { return getExtraInfoAsLong(output, START_TIME, 0L); } diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/DefaultChainedExecutable.java b/core-job/src/main/java/org/apache/kylin/job/execution/DefaultChainedExecutable.java index b912ecc..3bcd8ca 100644 --- a/core-job/src/main/java/org/apache/kylin/job/execution/DefaultChainedExecutable.java +++ b/core-job/src/main/java/org/apache/kylin/job/execution/DefaultChainedExecutable.java @@ -25,6 +25,7 @@ import java.util.Locale; import java.util.Map; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.lock.DistributedLockFactory; import org.apache.kylin.job.exception.ExecuteException; import com.google.common.collect.Lists; @@ -76,10 +77,11 @@ public class DefaultChainedExecutable extends AbstractExecutable implements Chai @Override protected void onExecuteStart(ExecutableContext executableContext) { final long startTime = getStartTime(); + Map<String, String> info = Maps.newHashMap(); + info.put(BUILD_INSTANCE, DistributedLockFactory.processAndHost()); if (startTime > 0) { - getManager().updateJobOutput(getId(), ExecutableState.RUNNING, null, null); + getManager().updateJobOutput(getId(), ExecutableState.RUNNING, info, null); } else { - Map<String, String> info = Maps.newHashMap(); info.put(START_TIME, Long.toString(System.currentTimeMillis())); getManager().updateJobOutput(getId(), ExecutableState.RUNNING, info, null); } diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java index b1244b5..22aa859 100644 --- a/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java +++ b/core-job/src/main/java/org/apache/kylin/job/execution/ExecutableManager.java @@ -444,7 +444,7 @@ public class ExecutableManager { jobOutput.setStatus(newStatus.toString()); } if (info != null) { - jobOutput.setInfo(info); + jobOutput.getInfo().putAll(info); } if (output != null) { jobOutput.setContent(output); 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 19fdca8..1b9b2d6 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 @@ -87,6 +87,7 @@ public class JobInfoConverter { result.setUuid(job.getId()); result.setType(CubeBuildTypeEnum.BUILD); result.setStatus(parseToJobStatus(output.getState())); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setMrWaiting(AbstractExecutable.getExtraInfoAsLong(output, CubingJob.MAP_REDUCE_WAIT_TIME, 0L) / 1000); result.setExecStartTime(AbstractExecutable.getStartTime(output)); result.setExecEndTime(AbstractExecutable.getEndTime(output)); @@ -121,6 +122,7 @@ public class JobInfoConverter { result.setUuid(job.getId()); result.setType(CubeBuildTypeEnum.CHECKPOINT); result.setStatus(parseToJobStatus(output.getState())); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setExecStartTime(AbstractExecutable.getStartTime(output)); result.setExecEndTime(AbstractExecutable.getEndTime(output)); result.setExecInterruptTime(AbstractExecutable.getInterruptTime(output)); diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java index 28cca02..46feea0 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java @@ -470,6 +470,7 @@ public class JobService extends BasicService implements InitializingBean { CubingJob cubeJob = (CubingJob) job; CubeInstance cube = CubeManager.getInstance(KylinConfig.getInstanceFromEnv()) .getCube(CubingExecutableUtil.getCubeName(cubeJob.getParams())); + Output output = cubeJob.getOutput(); final JobInstance result = new JobInstance(); result.setName(job.getName()); if (cube != null) { @@ -487,6 +488,7 @@ public class JobService extends BasicService implements InitializingBean { result.setType(CubeBuildTypeEnum.BUILD); result.setStatus(JobInfoConverter.parseToJobStatus(job.getStatus())); result.setMrWaiting(cubeJob.getMapReduceWaitTime() / 1000); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setDuration(cubeJob.getDuration() / 1000); for (int i = 0; i < cubeJob.getTasks().size(); ++i) { AbstractExecutable task = cubeJob.getTasks().get(i); @@ -499,7 +501,7 @@ public class JobService extends BasicService implements InitializingBean { if (job == null) { return null; } - + Output output = job.getOutput(); final JobInstance result = new JobInstance(); result.setName(job.getName()); result.setRelatedCube(CubingExecutableUtil.getCubeName(job.getParams())); @@ -509,6 +511,7 @@ public class JobService extends BasicService implements InitializingBean { result.setUuid(job.getId()); result.setType(CubeBuildTypeEnum.BUILD); result.setStatus(JobInfoConverter.parseToJobStatus(job.getStatus())); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setDuration(job.getDuration() / 1000); for (int i = 0; i < job.getTasks().size(); ++i) { AbstractExecutable task = job.getTasks().get(i); @@ -528,6 +531,7 @@ public class JobService extends BasicService implements InitializingBean { } CheckpointExecutable checkpointExecutable = (CheckpointExecutable) job; + Output output = checkpointExecutable.getOutput(); final JobInstance result = new JobInstance(); result.setName(job.getName()); result.setRelatedCube(CubingExecutableUtil.getCubeName(job.getParams())); @@ -537,6 +541,7 @@ public class JobService extends BasicService implements InitializingBean { result.setUuid(job.getId()); result.setType(CubeBuildTypeEnum.CHECKPOINT); result.setStatus(JobInfoConverter.parseToJobStatus(job.getStatus())); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setDuration(job.getDuration() / 1000); for (int i = 0; i < checkpointExecutable.getTasks().size(); ++i) { AbstractExecutable task = checkpointExecutable.getTasks().get(i); 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 18ace6f..5b58c4a 100644 --- a/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java +++ b/tool/src/main/java/org/apache/kylin/tool/JobInstanceExtractor.java @@ -145,6 +145,7 @@ public class JobInstanceExtractor extends AbstractInfoExtractor { result.setType(CubeBuildTypeEnum.BUILD); result.setStatus(parseToJobStatus(output.getState())); result.setMrWaiting(AbstractExecutable.getExtraInfoAsLong(output, CubingJob.MAP_REDUCE_WAIT_TIME, 0L) / 1000); + result.setBuildInstance(AbstractExecutable.getBuildInstance(output)); result.setExecStartTime(AbstractExecutable.getStartTime(output)); result.setExecEndTime(AbstractExecutable.getEndTime(output)); result.setExecInterruptTime(AbstractExecutable.getInterruptTime(output)); diff --git a/webapp/app/partials/jobs/job_steps.html b/webapp/app/partials/jobs/job_steps.html index f451805..0c64e15 100644 --- a/webapp/app/partials/jobs/job_steps.html +++ b/webapp/app/partials/jobs/job_steps.html @@ -54,6 +54,10 @@ </td> </tr> <tr> + <td><b>Built By</b></td> + <td>{{state.selectedJob.build_instance}}</td> + </tr> + <tr> <td><b>Duration</b></td> <td>{{(state.selectedJob.duration/60 | number:2) + ' mins'}}</td> </tr>