class Dynflow::Coordinator::SingletonActionLock

Used when there should be only one execution plan for a given action class

Public Class Methods

lock_id(action_class) click to toggle source
# File lib/dynflow/coordinator.rb, line 252
def self.lock_id(action_class)
  'singleton-action:' + action_class
end
new(action_class, execution_plan_id) click to toggle source
Calls superclass method Dynflow::Coordinator::Record::new
# File lib/dynflow/coordinator.rb, line 237
def initialize(action_class, execution_plan_id)
  super
  @data[:owner_id] = "execution-plan:#{execution_plan_id}"
  @data[:execution_plan_id] = execution_plan_id
  @data[:id] = self.class.lock_id(action_class)
end
unique_filter(action_class) click to toggle source
# File lib/dynflow/coordinator.rb, line 248
def self.unique_filter(action_class)
  { :class => self.name, :id => self.lock_id(action_class) }
end
valid_classes() click to toggle source
# File lib/dynflow/coordinator.rb, line 264
def self.valid_classes
  [self]
end
valid_owner_ids(coordinator) click to toggle source
# File lib/dynflow/coordinator.rb, line 256
def self.valid_owner_ids(coordinator)
  lock_ids = coordinator.find_locks(:class => self.name).map(&:owner_id)
  plans = coordinator.adapter.find_execution_plans(:uuid => lock_ids)
  plans = Hash[*plans.map { |plan| [plan[:uuid], plan[:state]] }.flatten]
  lock_ids.select { |id| plans.key?(id) && !%w(stopped paused).include?(plans[id]) }
          .map { |id| 'execution-plan:' + id }
end

Public Instance Methods

owner_id() click to toggle source
# File lib/dynflow/coordinator.rb, line 244
def owner_id
  @data[:execution_plan_id]
end