@Override public String toString() { return String.format("%s%s", this.getClass().getSimpleName(), this.getStartTasks()); }
private StageExecution(ExecutionStage stage, OptimizationContext optimizationContext, ExecutionState executionState) { this.executionState = executionState; this.optimizationContext = optimizationContext; // Initialize the readyActivators. assert !stage.getStartTasks().isEmpty() : String.format("No start tasks for %s.", stage); stage.getStartTasks().forEach(this::scheduleStartTask); // Initialize the terminalTasks. this.terminalTasks = RheemCollections.asSet(stage.getTerminalTasks()); }
@Override public void execute(final ExecutionStage stage, OptimizationContext optimizationContext, ExecutionState executionState) { Queue<ExecutionTask> scheduledTasks = new LinkedList<>(stage.getStartTasks()); Set<ExecutionTask> executedTasks = new HashSet<>(); while (!scheduledTasks.isEmpty()) { final ExecutionTask task = scheduledTasks.poll(); if (executedTasks.contains(task)) continue; this.execute(task, optimizationContext, executionState); executedTasks.add(task); Arrays.stream(task.getOutputChannels()) .flatMap(channel -> channel.getConsumers().stream()) .filter(consumer -> consumer.getStage() == stage) .forEach(scheduledTasks::add); } }