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 5837bd53975..e8f2512ec19 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 @@ -375,7 +375,8 @@ public void discardJob(String jobId) { } else { logger.warn("The job " + jobId + " has been discarded."); } - return; + throw new IllegalStateException( + "The job " + job.getId() + " has already been finished and cannot be discarded."); } if (job instanceof DefaultChainedExecutable) { List tasks = ((DefaultChainedExecutable) job).getTasks(); @@ -415,6 +416,22 @@ public void pauseJob(String jobId) { return; } + if (!(job.getStatus() == ExecutableState.READY + || job.getStatus() == ExecutableState.RUNNING)) { + logger.warn("The status of job " + jobId + " is " + job.getStatus().toString() + + ". It's final state and cannot be transfer to be stopped!!!"); + throw new IllegalStateException( + "The job " + job.getId() + " has already been finished and cannot be stopped."); + } + if (job instanceof DefaultChainedExecutable) { + List tasks = ((DefaultChainedExecutable) job).getTasks(); + for (AbstractExecutable task : tasks) { + if (!task.getStatus().isFinalState()) { + updateJobOutput(task.getId(), ExecutableState.STOPPED, null, null); + break; + } + } + } updateJobOutput(jobId, ExecutableState.STOPPED, null, null); } 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 f79281bb7f5..d6d612d5d0d 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 @@ -180,7 +180,8 @@ public JobInstance pause(@PathVariable String jobId) { try { final JobInstance jobInstance = jobService.getJobInstance(jobId); - return jobService.pauseJob(jobInstance); + jobService.pauseJob(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 309735fb965..46f01436690 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 @@ -658,11 +658,15 @@ private void setRelatedIdList(CheckpointExecutable checkpointExecutable, List