class Dynflow::Director::PlanningWorkItem
Public Instance Methods
execute()
click to toggle source
# File lib/dynflow/director.rb, line 113 def execute plan = world.persistence.load_delayed_plan(execution_plan_id) return if plan.nil? || plan.execution_plan.state != :scheduled if plan.start_before.nil? blocker_ids = world.persistence.find_execution_plan_dependencies(execution_plan_id) statuses = world.persistence.find_execution_plan_statuses({ filters: { uuid: blocker_ids } }) failed = statuses.select { |_uuid, status| status[:state] == 'stopped' && status[:result] == 'error' } if failed.any? plan.failed_dependencies(failed.keys) return end elsif plan.start_before < Time.now.utc() plan.timeout return end world.coordinator.acquire(Coordinator::PlanningLock.new(world, plan.execution_plan_uuid)) do plan.plan end plan.execute rescue => e world.logger.warn e.message world.logger.debug e.backtrace.join("\n") end