module Bosh::Director::LockHelper

Public Instance Methods

with_compile_lock(package_id, stemcell_id, opts = {}) { || ... } click to toggle source
# File lib/bosh/director/lock_helper.rb, line 42
def with_compile_lock(package_id, stemcell_id, opts = {})
  timeout = opts[:timeout] || 15 * 60 # 15 minutes

  Config.logger.info("Acquiring compile lock on " +
                         "#{package_id} #{stemcell_id}")
  Lock.new("lock:compile:#{package_id}:#{stemcell_id}",
           :timeout => timeout).lock { yield }
end
with_deployment_lock(deployment, opts = {}) { || ... } click to toggle source
# File lib/bosh/director/lock_helper.rb, line 3
def with_deployment_lock(deployment, opts = {})
  if deployment.respond_to?(:name)
    name = deployment.name
  elsif deployment.kind_of?(String)
    name = deployment
  else
    raise ArgumentError, "invalid deployment: #{deployment}"
  end
  timeout = opts[:timeout] || 10
  Config.logger.info("Acquiring deployment lock on #{name}")
  Lock.new("lock:deployment:#{name}", :timeout => timeout).lock { yield }
end
with_release_lock(release_name, opts = {}) { || ... } click to toggle source
# File lib/bosh/director/lock_helper.rb, line 23
def with_release_lock(release_name, opts = {})
  with_release_locks([release_name], opts) { yield }
end
with_release_locks(release_names, opts = {}) { || ... } click to toggle source
# File lib/bosh/director/lock_helper.rb, line 27
def with_release_locks(release_names, opts = {})
  timeout = opts[:timeout] || 10
  locks = release_names.sort.map do |release_name|
    Config.logger.info("Acquiring release lock: #{release_name}")
    Lock.new("lock:release:#{release_name}", :timeout => timeout)
  end

  begin
    locks.each { |lock| lock.lock }
    yield
  ensure
    locks.reverse_each { |lock| lock.release }
  end
end
with_stemcell_lock(name, version, opts = {}) { || ... } click to toggle source
# File lib/bosh/director/lock_helper.rb, line 16
def with_stemcell_lock(name, version, opts = {})
  timeout = opts[:timeout] || 10
  Config.logger.info("Acquiring stemcell lock on #{name}:#{version}")
  Lock.new("lock:stemcells:#{name}:#{version}", :timeout => timeout).
      lock { yield }
end