@Override public void onError(final Task task, final Throwable throwable) { _error = throwable; final int count = _countDown.decrementAndGet(); logger.debug("onComplete(), count = {}", count); invokeNested(count, task); }
public JoinTaskListener(final int tasksToWaitFor, final TaskListener nestedTaskListener) { _nestedTaskListener = nestedTaskListener; if (tasksToWaitFor == 0) { logger.warn( "Was asked to join execution after 0 tasks, this might be a bug. Continuing with immediate completion."); // immediate completion _countDown = new AtomicInteger(1); onComplete(null); } else { _countDown = new AtomicInteger(tasksToWaitFor); } }
/** * Starts row processing job flows. * * @param publishers * @param analysisJobMetrics * * @param injectionManager */ private void scheduleRowProcessing(final RowProcessingPublishers publishers, final LifeCycleHelper lifeCycleHelper, final JobCompletionTaskListener jobCompletionTaskListener, final AnalysisJobMetrics analysisJobMetrics) { logger.info("Created {} row processor publisher(s)", publishers.size()); final TaskListener rowProcessorPublishersDoneCompletionListener = new JoinTaskListener(publishers.size(), jobCompletionTaskListener); final Collection<RowProcessingPublisher> rowProcessingPublishers = publishers.getRowProcessingPublishers(); logger.debug("RowProcessingPublishers: {}", rowProcessingPublishers); dispatchWhenReady(rowProcessingPublishers, rowProcessorPublishersDoneCompletionListener); }
private List<TaskRunnable> createPostProcessingTasks(final Queue<JobAndResult> resultQueue, final TaskListener finishedTaskListener) { final List<RowProcessingConsumer> configurableConsumers = getConsumers(); final int numConsumers = configurableConsumers.size(); // add tasks for closing components final JoinTaskListener closeTaskListener = new JoinTaskListener(numConsumers, finishedTaskListener); final List<TaskRunnable> closeTasks = new ArrayList<>(); for (final RowProcessingConsumer consumer : configurableConsumers) { closeTasks.add(createCloseTask(consumer, closeTaskListener)); } final TaskListener getResultCompletionListener = new ForkTaskListener("collect results (" + getStream() + ")", getTaskRunner(), closeTasks); // add tasks for collecting results final TaskListener getResultTaskListener = new JoinTaskListener(numConsumers, getResultCompletionListener); final List<TaskRunnable> getResultTasks = new ArrayList<>(); for (final RowProcessingConsumer consumer : configurableConsumers) { final Task collectResultTask = createCollectResultTask(consumer, resultQueue); if (collectResultTask == null) { getResultTasks.add(new TaskRunnable(null, getResultTaskListener)); } else { getResultTasks.add(new TaskRunnable(collectResultTask, getResultTaskListener)); } } return getResultTasks; }
/** * Initializes consumers of this {@link SourceTableRowProcessingPublisher}. * * This method will not initialize consumers containing * {@link MultiStreamComponent}s. Ensure that * {@link #initializeMultiStreamConsumers(Set)} is also invoked. * * Once consumers are initialized, row processing can begin, expected rows * can be calculated and more. * * @param finishedListener */ @Override public final void initializeConsumers(final TaskListener finishedListener) { final TaskRunner taskRunner = getTaskRunner(); final List<RowProcessingConsumer> configurableConsumers = getConsumers(); final int numConfigurableConsumers = configurableConsumers.size(); final JoinTaskListener initFinishedListener = new JoinTaskListener(numConfigurableConsumers, finishedListener); for (final RowProcessingConsumer consumer : configurableConsumers) { final TaskRunnable task = createInitTask(consumer, initFinishedListener); taskRunner.run(task); } }
@Override public void onComplete(final Task task) { final int count = _countDown.decrementAndGet(); logger.debug("onComplete(), count = {}", count); invokeNested(count, task); }