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; }
@Override protected boolean runRowProcessingInternal(final List<TaskRunnable> postProcessingTasks) { final TaskListener runCompletionListener = new ForkTaskListener("run row processing (" + getStream() + ")", getTaskRunner(), postProcessingTasks); final RowProcessingMetrics rowProcessingMetrics = getRowProcessingMetrics(); final RunRowProcessingPublisherTask runTask = new RunRowProcessingPublisherTask(this, rowProcessingMetrics); getTaskRunner().run(runTask, runCompletionListener); return true; }
@Override protected boolean runRowProcessingInternal(final List<TaskRunnable> postProcessingTasks) { final TaskListener runCompletionListener = new ForkTaskListener("run row processing (" + getStream() + ")", getTaskRunner(), postProcessingTasks); final RowProcessingMetrics rowProcessingMetrics = getRowProcessingMetrics(); final RunRowProcessingPublisherTask runTask = new RunRowProcessingPublisherTask(this, rowProcessingMetrics); final TaskListener initFinishedListener = new RunNextTaskTaskListener(getTaskRunner(), runTask, runCompletionListener); // kick off the initialization initializeConsumers(initFinishedListener); return true; } }