private void cancelCheckpointJobInner(CheckpointExecutable checkpointExecutable) throws IOException { List<String> segmentIdList = Lists.newLinkedList(); List<String> jobIdList = Lists.newLinkedList(); jobIdList.add(checkpointExecutable.getId()); setRelatedIdList(checkpointExecutable, segmentIdList, jobIdList); CubeInstance cubeInstance = getCubeManager() .getCube(CubingExecutableUtil.getCubeName(checkpointExecutable.getParams())); if (!segmentIdList.isEmpty()) { List<CubeSegment> toRemoveSegments = Lists.newLinkedList(); for (String segmentId : segmentIdList) { final CubeSegment segment = cubeInstance.getSegmentById(segmentId); if (segment != null && segment.getStatus() != SegmentStatusEnum.READY) { toRemoveSegments.add(segment); } } CubeUpdate cubeBuilder = new CubeUpdate(cubeInstance); cubeBuilder.setToRemoveSegs(toRemoveSegments.toArray(new CubeSegment[toRemoveSegments.size()])); cubeBuilder.setCuboidsRecommend(Sets.<Long> newHashSet()); //Set recommend cuboids to be null getCubeManager().updateCube(cubeBuilder); } for (String jobId : jobIdList) { getExecutableManager().discardJob(jobId); } }
protected void releaseAllJobs(CubeInstance cube) { final List<CubingJob> cubingJobs = jobService.listJobsByRealizationName(cube.getName(), null); for (CubingJob cubingJob : cubingJobs) { final ExecutableState status = cubingJob.getStatus(); if (status != ExecutableState.SUCCEED && status != ExecutableState.DISCARDED) { getExecutableManager().discardJob(cubingJob.getId()); } } }
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()); } logger.info("Cancel job [" + job.getId() + "] trigger by " + SecurityContextHolder.getContext().getAuthentication().getName()); if (job.getStatus() == JobStatusEnum.FINISHED) { throw new IllegalStateException( "The job " + job.getId() + " has already been finished and cannot be discarded."); } 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()); } } }
private void cancelCubingJobInner(CubingJob cubingJob) throws IOException { CubeInstance cubeInstance = getCubeManager().getCube(CubingExecutableUtil.getCubeName(cubingJob.getParams())); // might not a cube job final String segmentIds = CubingExecutableUtil.getSegmentId(cubingJob.getParams()); if (!StringUtils.isEmpty(segmentIds)) { for (String segmentId : StringUtils.split(segmentIds)) { final CubeSegment segment = cubeInstance.getSegmentById(segmentId); if (segment != null && (segment.getStatus() == SegmentStatusEnum.NEW || segment.getTSRange().end.v == 0)) { // Remove this segment getCubeManager().updateCubeDropSegments(cubeInstance, segment); } } } getExecutableManager().discardJob(cubingJob.getId()); }
@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(); }