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)