module Dynflow::Action::Singleton
Public Class Methods
included(base)
click to toggle source
# File lib/dynflow/action/singleton.rb, line 6 def self.included(base) base.middleware.use ::Dynflow::Middleware::Common::Singleton end
Public Instance Methods
error!(*args)
click to toggle source
Calls superclass method
# File lib/dynflow/action/singleton.rb, line 39 def error!(*args) singleton_unlock! super end
holds_singleton_lock?()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 24 def holds_singleton_lock? # Get locks for this action, there should be none or one lock_filter = singleton_lock_class.unique_filter(self.class.name) present_locks = world.coordinator.find_locks lock_filter !present_locks.empty? && present_locks.first.owner_id == execution_plan_id end
singleton_lock()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 35 def singleton_lock singleton_lock_class.new(self.class.name, execution_plan_id) end
singleton_lock!()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 14 def singleton_lock! world.coordinator.acquire(singleton_lock) rescue Dynflow::Coordinator::LockError fail "Action #{self.class.name} is already active" end
singleton_lock_class()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 31 def singleton_lock_class ::Dynflow::Coordinator::SingletonActionLock end
singleton_unlock!()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 20 def singleton_unlock! world.coordinator.release(singleton_lock) if holds_singleton_lock? end
validate_singleton_lock!()
click to toggle source
# File lib/dynflow/action/singleton.rb, line 10 def validate_singleton_lock! singleton_lock! unless holds_singleton_lock? end