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>

Reply via email to