@Test public void testRetryableException() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task = new ErrorTestExecutable(); job.addTask(task); System.setProperty("kylin.job.retry", "3"); //don't retry on DefaultChainedExecutable, only retry on subtasks Assert.assertFalse(job.needRetry(1, new Exception(""))); Assert.assertTrue(task.needRetry(1, new Exception(""))); Assert.assertFalse(task.needRetry(1, null)); Assert.assertFalse(task.needRetry(4, new Exception(""))); System.setProperty("kylin.job.retry-exception-classes", "java.io.FileNotFoundException"); Assert.assertTrue(task.needRetry(1, new FileNotFoundException())); Assert.assertFalse(task.needRetry(1, new Exception(""))); } }
@Test public void testSchedulerStop() throws Exception { logger.info("testSchedulerStop"); thrown.expect(RuntimeException.class); thrown.expectMessage("too long wait time"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new FiveSecondSucceedTestExecutable(); job.addTask(task1); execMgr.addJob(job); //sleep 3s to make sure SucceedTestExecutable is running Thread.sleep(3000); //scheduler failed due to some reason scheduler.shutdown(); waitForJobFinish(job.getId(), 6000); }
@Test public void testDefaultChainedExecutable() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); job.addTask(new SucceedTestExecutable()); job.addTask(new SucceedTestExecutable()); service.addJob(job); assertEquals(2, job.getTasks().size()); AbstractExecutable anotherJob = service.getJob(job.getId()); assertEquals(DefaultChainedExecutable.class, anotherJob.getClass()); assertEquals(2, ((DefaultChainedExecutable) anotherJob).getTasks().size()); assertJobEqual(job, anotherJob); }
@Test public void testSchedulerRestart() throws Exception { logger.info("testSchedulerRestart"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new FiveSecondSucceedTestExecutable(); job.addTask(task1); execMgr.addJob(job); //sleep 3s to make sure SucceedTestExecutable is running Thread.sleep(3000); //scheduler failed due to some reason scheduler.shutdown(); //restart startScheduler(); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task1.getId()).getState()); }
@Test public void testSingleTaskJob() throws Exception { logger.info("testSingleTaskJob"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); job.addTask(task1); execMgr.addJob(job); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task1.getId()).getState()); }
@Test public void testDiscard() throws Exception { logger.info("testDiscard"); DefaultChainedExecutable job = new DefaultChainedExecutable(); SelfStopExecutable task1 = new SelfStopExecutable(); job.addTask(task1); execMgr.addJob(job); Thread.sleep(1100); // give time to launch job/task1 waitForJobStatus(job.getId(), ExecutableState.RUNNING, 500); execMgr.discardJob(job.getId()); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.DISCARDED, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.DISCARDED, execMgr.getOutput(task1.getId()).getState()); task1.waitForDoWork(); }
DefaultChainedExecutable job = new DefaultChainedExecutable();
@Test public void testSucceedAndError() throws Exception { logger.info("testSucceedAndError"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new ErrorTestExecutable(); BaseTestExecutable task2 = new SucceedTestExecutable(); job.addTask(task1); job.addTask(task2); execMgr.addJob(job); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(task1.getId()).getState()); Assert.assertEquals(ExecutableState.READY, execMgr.getOutput(task2.getId()).getState()); }
@Test public void testSucceed() throws Exception { logger.info("testSucceed"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); BaseTestExecutable task2 = new SucceedTestExecutable(); job.addTask(task1); job.addTask(task2); execMgr.addJob(job); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task1.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task2.getId()).getState()); }
@Test public void testSucceedAndFailed() throws Exception { logger.info("testSucceedAndFailed"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); BaseTestExecutable task2 = new FailedTestExecutable(); job.addTask(task1); job.addTask(task2); execMgr.addJob(job); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task1.getId()).getState()); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(task2.getId()).getState()); }
@Test public void testIllegalState() throws Exception { logger.info("testIllegalState"); DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); BaseTestExecutable task2 = new RunningTestExecutable(); job.addTask(task1); job.addTask(task2); execMgr.addJob(job); ExecutableManager.getInstance(KylinConfig.getInstanceFromEnv()).updateJobOutput(task2.getId(), ExecutableState.RUNNING, null, null); waitForJobFinish(job.getId(), 10000); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(job.getId()).getState()); Assert.assertEquals(ExecutableState.SUCCEED, execMgr.getOutput(task1.getId()).getState()); Assert.assertEquals(ExecutableState.ERROR, execMgr.getOutput(task2.getId()).getState()); }
@Test public void testDefaultChainedExecutable() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); job.addTask(new SucceedTestExecutable()); job.addTask(new SucceedTestExecutable()); service.addJob(job); assertEquals(2, job.getTasks().size()); AbstractExecutable anotherJob = service.getJob(job.getId()); assertEquals(DefaultChainedExecutable.class, anotherJob.getClass()); assertEquals(2, ((DefaultChainedExecutable) anotherJob).getTasks().size()); assertJobEqual(job, anotherJob); }
@Test public void testDiscard() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SelfStopExecutable(); job.addTask(task1); jobService.addJob(job); waitForJobStatus(job.getId(), ExecutableState.RUNNING, 500); jobService.discardJob(job.getId()); waitForJobFinish(job.getId()); assertEquals(ExecutableState.DISCARDED, jobService.getOutput(job.getId()).getState()); assertEquals(ExecutableState.DISCARDED, jobService.getOutput(task1.getId()).getState()); Thread.sleep(5000); System.out.println(job); } }
@Test public void testSingleTaskJob() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); job.addTask(task1); jobService.addJob(job); waitForJobFinish(job.getId()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(job.getId()).getState()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(task1.getId()).getState()); }
@Test public void testSucceedAndError() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new ErrorTestExecutable(); BaseTestExecutable task2 = new SucceedTestExecutable(); job.addTask(task1); job.addTask(task2); jobService.addJob(job); waitForJobFinish(job.getId()); assertEquals(ExecutableState.ERROR, jobService.getOutput(job.getId()).getState()); assertEquals(ExecutableState.ERROR, jobService.getOutput(task1.getId()).getState()); assertEquals(ExecutableState.READY, jobService.getOutput(task2.getId()).getState()); }
@Test public void testSucceed() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); BaseTestExecutable task2 = new SucceedTestExecutable(); job.addTask(task1); job.addTask(task2); jobService.addJob(job); waitForJobFinish(job.getId()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(job.getId()).getState()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(task1.getId()).getState()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(task2.getId()).getState()); } @Test
@Test public void testSucceedAndFailed() throws Exception { DefaultChainedExecutable job = new DefaultChainedExecutable(); BaseTestExecutable task1 = new SucceedTestExecutable(); BaseTestExecutable task2 = new FailedTestExecutable(); job.addTask(task1); job.addTask(task2); jobService.addJob(job); waitForJobFinish(job.getId()); assertEquals(ExecutableState.ERROR, jobService.getOutput(job.getId()).getState()); assertEquals(ExecutableState.SUCCEED, jobService.getOutput(task1.getId()).getState()); assertEquals(ExecutableState.ERROR, jobService.getOutput(task2.getId()).getState()); } @Test