/** * Collects all {@link Channel}s that are copies. We recognize them as {@link Channel}s that are open. */ public Collection<Channel> getOpenInputChannels() { return this.collectAllTasks().stream() .flatMap(task -> Arrays.stream(task.getInputChannels())) .filter(Channel::isCopy) .collect(Collectors.toList()); }
/** * Implements various sanity checks. Problems are logged. */ public boolean isSane() { // 1. Check if every ExecutionTask is assigned an ExecutionStage. final Set<ExecutionTask> allTasks = this.collectAllTasks(); boolean isAllTasksAssigned = allTasks.stream().allMatch(task -> task.getStage() != null); if (!isAllTasksAssigned) { this.logger.error("There are tasks without stages."); } final Set<Channel> allChannels = allTasks.stream() .flatMap(task -> Stream.concat(Arrays.stream(task.getInputChannels()), Arrays.stream(task.getOutputChannels()))) .collect(Collectors.toSet()); boolean isAllChannelsOriginal = allChannels.stream() .allMatch(channel -> !channel.isCopy()); if (!isAllChannelsOriginal) { this.logger.error("There are channels that are copies."); } boolean isAllSiblingsConsistent = true; for (Channel channel : allChannels) { for (Channel sibling : channel.getSiblings()) { if (!allChannels.contains(sibling)) { this.logger.error("A sibling of {}, namely {}, seems to be invalid.", channel, sibling); isAllSiblingsConsistent = false; } } } return isAllTasksAssigned && isAllChannelsOriginal && isAllSiblingsConsistent; }
final Set<ExecutionTask> executedTasks = baseplan.collectAllTasks(); executedTasks.forEach(task -> this.executedTasks.put(task.getOperator(), task));
Set<ExecutionTask> executionTasks = executionPlan.collectAllTasks();
final Set<ExecutionOperator> executedOperators = existingPlan.collectAllTasks().stream() .map(ExecutionTask::getOperator) .collect(Collectors.toSet());