# File lib/dynflow/director/sequential_manager.rb, line 6 def initialize(world, execution_plan) @world = world @execution_plan = execution_plan @done = false end
# File lib/dynflow/director/sequential_manager.rb, line 40 def done? @done end
# File lib/dynflow/director/sequential_manager.rb, line 21 def finalize reset_finalize_steps unless execution_plan.error? step_id = execution_plan.finalize_flow.all_step_ids.first action_class = execution_plan.steps[step_id].action_class world.middleware.execute(:finalize_phase, action_class, execution_plan) do dispatch(execution_plan.finalize_flow) end end @done = true end
# File lib/dynflow/director/sequential_manager.rb, line 33 def reset_finalize_steps execution_plan.finalize_flow.all_step_ids.each do |step_id| step = execution_plan.steps[step_id] step.state = :pending if [:success, :error].include? step.state end end
# File lib/dynflow/director/sequential_manager.rb, line 12 def run with_state_updates do dispatch(execution_plan.run_flow) finalize end return execution_plan end
# File lib/dynflow/director/sequential_manager.rb, line 46 def dispatch(flow) case flow when Flows::Sequence run_in_sequence(flow.flows) when Flows::Concurrence run_in_concurrence(flow.flows) when Flows::Atom run_step(execution_plan.steps[flow.step_id]) else raise ArgumentError, "Don't know how to run #{flow}" end end
# File lib/dynflow/director/sequential_manager.rb, line 63 def run_in_concurrence(steps) run_in_sequence(steps) end
# File lib/dynflow/director/sequential_manager.rb, line 59 def run_in_sequence(steps) steps.all? { |s| dispatch(s) } end
# File lib/dynflow/director/sequential_manager.rb, line 67 def run_step(step) step.execute return step.state != :error end
# File lib/dynflow/director/sequential_manager.rb, line 72 def with_state_updates(&block) execution_plan.update_state(:running) block.call execution_plan.update_state(execution_plan.error? ? :paused : :stopped) end