You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/08/28 03:08:39 UTC

[kylin] branch master updated: KYLIN-3516 Fix job status not updated after job discarded

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 5a2b76c  KYLIN-3516 Fix job status not updated after job discarded
5a2b76c is described below

commit 5a2b76c874dde642ad04d0734f14ea944d334184
Author: nichunen <ch...@kyligence.io>
AuthorDate: Sun Aug 26 20:19:25 2018 +0800

    KYLIN-3516 Fix job status not updated after job discarded
---
 .../kylin/rest/controller/JobController.java       |  3 ++-
 .../org/apache/kylin/rest/service/JobService.java  | 23 ++++++++++------------
 .../kylin/rest/controller/JobControllerTest.java   | 19 +++++++++---------
 3 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java
index 5407649..efe9e0e 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java
@@ -160,7 +160,8 @@ public class JobController extends BasicController {
 
         try {
             final JobInstance jobInstance = jobService.getJobInstance(jobId);
-            return jobService.cancelJob(jobInstance);
+            jobService.cancelJob(jobInstance);
+            return jobService.getJobInstance(jobId);
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e);
             throw new InternalErrorException(e);
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 2603267..8f8658c 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
@@ -559,12 +559,11 @@ public class JobService extends BasicService implements InitializingBean {
         getExecutableManager().rollbackJob(job.getId(), stepId);
     }
 
-    public JobInstance cancelJob(JobInstance job) throws IOException {
+    public void cancelJob(JobInstance job) throws IOException {
         aclEvaluate.checkProjectOperationPermission(job);
         if (null == job.getRelatedCube() || null == getCubeManager().getCube(job.getRelatedCube())
                 || null == job.getRelatedSegment()) {
             getExecutableManager().discardJob(job.getId());
-            return job;
         }
 
         logger.info("Cancel job [" + job.getId() + "] trigger by "
@@ -573,19 +572,17 @@ public class JobService extends BasicService implements InitializingBean {
             throw new IllegalStateException(
                     "The job " + job.getId() + " has already been finished and cannot be discarded.");
         }
-        if (job.getStatus() == JobStatusEnum.DISCARDED) {
-            return job;
-        }
 
-        AbstractExecutable executable = getExecutableManager().getJob(job.getId());
-        if (executable instanceof CubingJob) {
-            cancelCubingJobInner((CubingJob) executable);
-        } else if (executable instanceof CheckpointExecutable) {
-            cancelCheckpointJobInner((CheckpointExecutable) executable);
-        } else {
-            getExecutableManager().discardJob(executable.getId());
+        if (job.getStatus() != JobStatusEnum.DISCARDED) {
+            AbstractExecutable executable = getExecutableManager().getJob(job.getId());
+            if (executable instanceof CubingJob) {
+                cancelCubingJobInner((CubingJob) executable);
+            } else if (executable instanceof CheckpointExecutable) {
+                cancelCheckpointJobInner((CheckpointExecutable) executable);
+            } else {
+                getExecutableManager().discardJob(executable.getId());
+            }
         }
-        return job;
     }
 
     private void cancelCubingJobInner(CubingJob cubingJob) throws IOException {
diff --git a/server/src/test/java/org/apache/kylin/rest/controller/JobControllerTest.java b/server/src/test/java/org/apache/kylin/rest/controller/JobControllerTest.java
index 4364743..439381e 100644
--- a/server/src/test/java/org/apache/kylin/rest/controller/JobControllerTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/controller/JobControllerTest.java
@@ -18,12 +18,16 @@
 
 package org.apache.kylin.rest.controller;
 
+import java.io.IOException;
+import java.util.Date;
+
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.cube.CubeDescManager;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.model.CubeDesc;
 import org.apache.kylin.job.JobInstance;
+import org.apache.kylin.job.constant.JobStatusEnum;
 import org.apache.kylin.job.dao.ExecutableDao;
 import org.apache.kylin.job.exception.PersistentException;
 import org.apache.kylin.rest.request.JobBuildRequest;
@@ -38,11 +42,6 @@ import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 
-import java.io.IOException;
-import java.util.Date;
-
-import static org.junit.Assert.assertNotNull;
-
 /**
  * @author xduo
  */
@@ -91,7 +90,7 @@ public class JobControllerTest extends ServiceTestBase {
     public void testBasics() throws IOException, PersistentException {
         CubeDesc cubeDesc = cubeDescManager.getCubeDesc("test_kylin_cube_with_slr_left_join_desc");
         CubeInstance cube = cubeManager.createCube(CUBE_NAME, "DEFAULT", cubeDesc, "test");
-        assertNotNull(cube);
+        Assert.assertNotNull(cube);
 
         JobListRequest jobRequest = new JobListRequest();
         jobRequest.setTimeFilter(4);
@@ -100,11 +99,9 @@ public class JobControllerTest extends ServiceTestBase {
         jobRequest.setJobSearchMode("ALL");
         Assert.assertNotNull(jobSchedulerController.list(jobRequest));
 
-
         jobRequest.setJobSearchMode("");
         Assert.assertNotNull(jobSchedulerController.list(jobRequest));
 
-
         jobRequest.setJobSearchMode("wrong-input");
         Assert.assertNotNull(jobSchedulerController.list(jobRequest));
 
@@ -115,12 +112,14 @@ public class JobControllerTest extends ServiceTestBase {
         JobInstance job = cubeController.rebuild(CUBE_NAME, jobBuildRequest);
 
         Assert.assertNotNull(jobSchedulerController.get(job.getId()));
+
+        job = jobSchedulerController.cancel(job.getId());
+        Assert.assertEquals(JobStatusEnum.DISCARDED, job.getStatus());
+
         executableDAO.deleteJob(job.getId());
         if (cubeManager.getCube(CUBE_NAME) != null) {
             cubeManager.dropCube(CUBE_NAME, false);
         }
-
-        // jobSchedulerController.cancel(job.getId());
     }
 
     @Test(expected = RuntimeException.class)