protected void assertHasSameInfo(PipelineExecutorTask expectedTask, PipelineExecutorTask task) { assertEquals(expectedTask.getId(), task.getId()); assertEquals(expectedTask.getPipelineStatus(), task.getPipelineStatus()); assertEquals(expectedTask.getPipelineError(), task.getPipelineError()); assertEquals(expectedTask.getOutput(), task.getOutput()); assertHasSameInfo(expectedTask.getTaskDef(), task.getTaskDef()); expectedTask.getTaskDef().getStages().forEach(stage -> { assertEquals(expectedTask.getStageStatus(stage), task.getStageStatus(stage)); assertEquals(expectedTask.getStageError(stage), task.getStageError(stage)); }); }
/** * Executes a task in asynchronous mode. * @param task the task for execute. * @return the taskId of the task. */ private synchronized void startAsyncTask(final PipelineExecutorTask task) { final Future<?> future = executor.submit(() -> { final Pipeline pipeline = pipelineRegistry.getPipelineByName(task.getTaskDef().getPipeline()); try { pipelineExecutor.execute(task.getTaskDef().getInput(), pipeline, output -> processPipelineOutput(task, output), localListener); } catch (Exception e) { logger.error("An error was produced during pipeline execution for PipelineExecutorTask: " + task.getId(), e); } finally { removeTaskEntry(task.getId()); removeFutureTask(task.getId()); } }); storeFutureTask(task.getId(), future); }
@Override public boolean test(PipelineExecutorTrace pipelineExecutorTrace) { if (pipelineExecutionId != null) { return pipelineExecutionId.equals(pipelineExecutorTrace.getTaskId()); } if (runtimeId != null) { return (pipelineExecutorTrace.getTask().getOutput() instanceof RuntimeId) && runtimeId.equals(((RuntimeId) pipelineExecutorTrace.getTask().getOutput()).getId()); } if (runtimeName != null) { return (pipelineExecutorTrace.getTask().getOutput() instanceof RuntimeId) && runtimeName.equals(((RuntimeId) pipelineExecutorTrace.getTask().getOutput()).getName()); } if (providerId != null) { if (pipelineExecutorTrace.getTask().getTaskDef().getProviderId() == null) { return false; } else if (!providerId.equals(pipelineExecutorTrace.getTask().getTaskDef().getProviderId().getId())) { return false; } } if (pipelineId != null) { if (!pipelineId.equals(pipelineExecutorTrace.getPipelineId())) { return false; } } return true; } }
@Test public void testDeleteTask() throws Exception { PipelineExecutorTrace trace = mock(PipelineExecutorTrace.class); PipelineExecutorTask task = mock(PipelineExecutorTask.class); PipelineExecutorTask.Status status = PipelineExecutorTask.Status.STOPPED; when(task.getPipelineStatus()).thenReturn(status); when(trace.getTask()).thenReturn(task); when(pipelineExecutorRegistry.getExecutorTrace(TASK_ID)).thenReturn(trace); taskManager.delete(TASK_ID); verify(pipelineExecutorRegistry, times(1)).deregister(TASK_ID); }
@Override public PipelineExecutorTrace getExecutorTrace(final RuntimeId runtimeId) { checkNotNull("runtimeId", runtimeId); return recordsMap.values() .stream() .filter(trace -> (trace.getTask().getOutput() instanceof RuntimeId) && runtimeId.getId().equals(((RuntimeId) trace.getTask().getOutput()).getId()) ).findFirst().orElse(null); } }
@JsonIgnore @Override public String getPipelineId() { return getTask().getTaskDef().getPipeline(); }
/** * Shortcut to the task id. * @return returns the id of the internal task. */ @JsonIgnore public String getTaskId() { return getTask().getId(); }
/** * Executes a task in asynchronous mode. * @param task the task for execute. * @return the taskId of the task. */ private synchronized void startAsyncTask(final PipelineExecutorTask task) { final Future<?> future = executor.submit(() -> { final Pipeline pipeline = pipelineRegistry.getPipelineByName(task.getTaskDef().getPipeline()); try { pipelineExecutor.execute(task.getTaskDef().getInput(), pipeline, output -> processPipelineOutput(task, output), localListener); } catch (Exception e) { logger.error("An error was produced during pipeline execution for PipelineExecutorTask: " + task.getId(), e); } finally { removeTaskEntry(task.getId()); removeFutureTask(task.getId()); } }); storeFutureTask(task.getId(), future); }
@Test public void testDeleteTask() throws Exception { PipelineExecutorTrace trace = mock(PipelineExecutorTrace.class); PipelineExecutorTask task = mock(PipelineExecutorTask.class); PipelineExecutorTask.Status status = PipelineExecutorTask.Status.STOPPED; when(task.getPipelineStatus()).thenReturn(status); when(trace.getTask()).thenReturn(task); when(pipelineExecutorRegistry.getExecutorTrace(TASK_ID)).thenReturn(trace); taskManager.delete(TASK_ID); verify(pipelineExecutorRegistry, times(1)).deregister(TASK_ID); }
@Override public PipelineExecutorTrace getExecutorTrace(final RuntimeId runtimeId) { checkNotNull("runtimeId", runtimeId); return recordsMap.values() .stream() .filter(trace -> (trace.getTask().getOutput() instanceof RuntimeId) && runtimeId.getId().equals(((RuntimeId) trace.getTask().getOutput()).getId()) ).findFirst().orElse(null); } }
@JsonIgnore @Override public String getPipelineId() { return getTask().getTaskDef().getPipeline(); }
/** * Shortcut to the task id. * @return returns the id of the internal task. */ @JsonIgnore public String getTaskId() { return getTask().getId(); }
protected void assertHasSameInfo(PipelineExecutorTask expectedTask, PipelineExecutorTask task) { assertEquals(expectedTask.getId(), task.getId()); assertEquals(expectedTask.getPipelineStatus(), task.getPipelineStatus()); assertEquals(expectedTask.getPipelineError(), task.getPipelineError()); assertEquals(expectedTask.getOutput(), task.getOutput()); assertHasSameInfo(expectedTask.getTaskDef(), task.getTaskDef()); expectedTask.getTaskDef().getStages().forEach(stage -> { assertEquals(expectedTask.getStageStatus(stage), task.getStageStatus(stage)); assertEquals(expectedTask.getStageError(stage), task.getStageError(stage)); }); }
private void testDeleteTaskInNonStopeableState(PipelineExecutorTask.Status nonStopeableStatus) throws Exception { PipelineExecutorTask task = mock(PipelineExecutorTask.class); when(task.getPipelineStatus()).thenReturn(nonStopeableStatus); PipelineExecutorTrace trace = mock(PipelineExecutorTrace.class); when(trace.getTask()).thenReturn(task); when(pipelineExecutorRegistry.getExecutorTrace(TASK_ID)).thenReturn(trace); expectedException.expectMessage(new StartsWith("A PipelineExecutorTask in status: " + nonStopeableStatus + " can not" + " be deleted. Delete operation is available for the following status set:")); taskManager.delete(TASK_ID); }
@Test public void getExecutorTraceByRuntimeId() { RuntimeIdMock runtimeId = mock(RuntimeIdMock.class); when(runtimeId.getId()).thenReturn(RUNTIME_ID); PipelineExecutorTask task = mock(PipelineExecutorTask.class); when(task.getOutput()).thenReturn(runtimeId); when(trace.getTask()).thenReturn(task); pipelineExecutorRegistry.register(trace); PipelineExecutorTrace result = pipelineExecutorRegistry.getExecutorTrace(runtimeId); assertEquals(trace, result); }
private void assertEqualsPipelineExecutorTrace(PipelineExecutorTraceImpl expectedValue, PipelineExecutorTraceImpl value) { assertEquals(expectedValue.getTaskId(), value.getTaskId()); assertEquals(expectedValue.getPipelineId(), value.getPipelineId()); assertEquals(expectedValue.getTask().getTaskDef(), value.getTask().getTaskDef()); assertEquals(expectedValue.getTask().getPipelineStatus(), value.getTask().getPipelineStatus()); assertEquals(expectedValue.getTask().getPipelineError(), value.getTask().getPipelineError()); for (String stage : expectedValue.getTask().getTaskDef().getStages()) { assertEquals(expectedValue.getTask().getStageStatus(stage), value.getTask().getStageStatus(stage)); assertEquals(expectedValue.getTask().getStageError(stage), value.getTask().getStageError(stage)); } assertEquals(expectedValue.getTask().getOutput(), value.getTask().getOutput()); }
private void testDeleteTaskInNonStopeableState(PipelineExecutorTask.Status nonStopeableStatus) throws Exception { PipelineExecutorTask task = mock(PipelineExecutorTask.class); when(task.getPipelineStatus()).thenReturn(nonStopeableStatus); PipelineExecutorTrace trace = mock(PipelineExecutorTrace.class); when(trace.getTask()).thenReturn(task); when(pipelineExecutorRegistry.getExecutorTrace(TASK_ID)).thenReturn(trace); expectedException.expectMessage(new StartsWith("A PipelineExecutorTask in status: " + nonStopeableStatus + " can not" + " be deleted. Delete operation is available for the following status set:")); taskManager.delete(TASK_ID); }
@Test public void getExecutorTraceByRuntimeId() { RuntimeIdMock runtimeId = mock(RuntimeIdMock.class); when(runtimeId.getId()).thenReturn(RUNTIME_ID); PipelineExecutorTask task = mock(PipelineExecutorTask.class); when(task.getOutput()).thenReturn(runtimeId); when(trace.getTask()).thenReturn(task); pipelineExecutorRegistry.register(trace); PipelineExecutorTrace result = pipelineExecutorRegistry.getExecutorTrace(runtimeId); assertEquals(trace, result); }
private void assertEqualsPipelineExecutorTrace(PipelineExecutorTraceImpl expectedValue, PipelineExecutorTraceImpl value) { assertEquals(expectedValue.getTaskId(), value.getTaskId()); assertEquals(expectedValue.getPipelineId(), value.getPipelineId()); assertEquals(expectedValue.getTask().getTaskDef(), value.getTask().getTaskDef()); assertEquals(expectedValue.getTask().getPipelineStatus(), value.getTask().getPipelineStatus()); assertEqualsPipelineExecutorException(expectedValue.getTask().getPipelineError(), value.getTask().getPipelineError()); for (String stage : expectedValue.getTask().getTaskDef().getStages()) { assertEquals(expectedValue.getTask().getStageStatus(stage), value.getTask().getStageStatus(stage)); assertEqualsPipelineExecutorException(expectedValue.getTask().getStageError(stage), value.getTask().getStageError(stage)); } assertEquals(expectedValue.getTask().getOutput(), value.getTask().getOutput()); }
@Override public void delete(final String taskId) throws PipelineExecutorException { final TaskEntry entry = getTaskEntry(taskId); if (entry != null) { throw new PipelineExecutorException("An active PipelineExecutorTask was found for taskId: " + taskId + " delete operation is only available for the following status set: " + deleteEnabledStatus); } final PipelineExecutorTrace trace = pipelineExecutorRegistry.getExecutorTrace(taskId); if (trace == null) { throw new PipelineExecutorException("No PipelineExecutorTask was found for taskId: " + taskId); } else { if (!deleteEnabledStatus.contains(trace.getTask().getPipelineStatus())) { throw new PipelineExecutorException("A PipelineExecutorTask in status: " + trace.getTask().getPipelineStatus().name() + " can not" + " be deleted. Delete operation is available for the following status set: " + deleteEnabledStatus); } else { pipelineExecutorRegistry.deregister(taskId); } } }