Repository: kylin Updated Branches: refs/heads/2.0.x-hbase0.98 b6003a0ad -> 9bba3d46e (forced update)
KYLIN-2711 avoid NPE if output is lost Signed-off-by: Li Yang <liy...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0fcc7eeb Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0fcc7eeb Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0fcc7eeb Branch: refs/heads/2.0.x-hbase0.98 Commit: 0fcc7eeb68dbf3a20661745d42725463023b1990 Parents: 04ea614 Author: Alexander Sterligov <sterligo...@joom.it> Authored: Wed Jul 5 13:42:49 2017 +0300 Committer: Li Yang <liy...@apache.org> Committed: Mon Jul 17 09:55:35 2017 +0800 ---------------------------------------------------------------------- .../apache/kylin/rest/service/JobService.java | 4 +++ .../kylin/rest/service/JobServiceTest.java | 33 ++++++++++++++++++++ 2 files changed, 37 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/0fcc7eeb/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java ---------------------------------------------------------------------- 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 4ba426e..e40173d 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 @@ -396,6 +396,10 @@ public class JobService extends BasicService implements InitializingBean { public boolean apply(CubingJob executable) { try { Output output = allOutputs.get(executable.getId()); + if (output == null){ + return false; + } + ExecutableState state = output.getState(); boolean ret = statusList.contains(state); return ret; http://git-wip-us.apache.org/repos/asf/kylin/blob/0fcc7eeb/server/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java ---------------------------------------------------------------------- diff --git a/server/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java b/server/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java index 4150808..7475a5d 100644 --- a/server/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java +++ b/server/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java @@ -19,9 +19,14 @@ package org.apache.kylin.rest.service; import java.io.IOException; +import java.util.Collections; +import java.util.List; +import org.apache.kylin.engine.mr.CubingJob; import org.apache.kylin.job.constant.JobTimeFilterEnum; +import org.apache.kylin.job.exception.ExecuteException; import org.apache.kylin.job.exception.JobException; +import org.apache.kylin.job.execution.*; import org.apache.kylin.metadata.project.ProjectInstance; import org.junit.Assert; import org.junit.Test; @@ -47,4 +52,32 @@ public class JobServiceTest extends ServiceTestBase { Assert.assertNull(jobService.getJobInstance("job_not_exist")); Assert.assertNotNull(jobService.searchJobs(null, null, null, 0, 0, JobTimeFilterEnum.ALL)); } + + @Test + public void testExceptionOnLostJobOutput() { + ExecutableManager manager = ExecutableManager.getInstance(jobService.getConfig()); + AbstractExecutable executable = new TestJob(); + manager.addJob(executable); + List<CubingJob> jobs = jobService.innerSearchCubingJobs("cube", + "jobName", + Collections.<ExecutableState>emptySet(), + 0, + Long.MAX_VALUE, + Collections.<String, Output>emptyMap(), + true, + "project"); + Assert.assertEquals(0, jobs.size()); + } + + public static class TestJob extends CubingJob { + + public TestJob(){ + super(); + } + + @Override + protected ExecuteResult doWork(ExecutableContext context) throws ExecuteException { + return new ExecuteResult(ExecuteResult.State.SUCCEED, ""); + } + } }