class MotherBrain::LockManager

A registry of locks obtained against resources on a Chef Server

Attributes

locks[R]

@return [Set<ChefMutex>]

Public Class Methods

instance() click to toggle source

@raise [Celluloid::DeadActorError] if lock manager has not been started

@return [Celluloid::Actor(LockManager)]

# File lib/mb/lock_manager.rb, line 8
def instance
  MB::Application[:lock_manager] or raise Celluloid::DeadActorError, "lock manager not running"
end
new() click to toggle source
# File lib/mb/lock_manager.rb, line 21
def initialize
  log.debug { "Lock Manager starting..." }
  @locks = Set.new
end

Public Instance Methods

async_lock(environment) click to toggle source

Asynchronously lock an environment

@param [String] environment

@return [MB::JobRecord]

# File lib/mb/lock_manager.rb, line 63
def async_lock(environment)
  job = Job.new(:lock)
  async(:lock, job, environment)
  job.ticket
end
async_unlock(environment) click to toggle source

Asynchronously unlock an environment

@param [String] environment

@return [MB::JobRecord]

# File lib/mb/lock_manager.rb, line 89
def async_unlock(environment)
  job = Job.new(:unlock)
  async(:unlock, job, environment)
  job.ticket
end
find(options) click to toggle source

Find a lock of the given name in the list of registered locks

@see ChefMutex#initialize

@return [ChefMutex, nil]

# File lib/mb/lock_manager.rb, line 31
def find(options)
  type, name = options.to_a.flatten

  locks.find { |mutex|
    mutex.type == type &&
    mutex.name == name
  }
end
lock(job, environment) click to toggle source

Lock an environment

@param [MB::Job] job @param [String] environment

@return [Boolean]

# File lib/mb/lock_manager.rb, line 75
def lock(job, environment)
  ChefMutex.new(
    chef_environment: environment,
    force: true,
    job: job,
    report_job_status: true
  ).lock
end
register(mutex) click to toggle source

Register the given lock

@param [ChefMutex] mutex

# File lib/mb/lock_manager.rb, line 43
def register(mutex)
  locks.add(mutex)
end
reset() click to toggle source
# File lib/mb/lock_manager.rb, line 47
def reset
  self.locks.clear
end
unlock(job, environment) click to toggle source

Unlock an environment

@param [MB::Job] job @param [String] environment

@return [Boolean]

# File lib/mb/lock_manager.rb, line 101
def unlock(job, environment)
  ChefMutex.new(
    chef_environment: environment,
    force: true,
    job: job,
    report_job_status: true
  ).unlock
end
unregister(mutex) click to toggle source

Unregister the given lock

@param [ChefMutex] mutex

# File lib/mb/lock_manager.rb, line 54
def unregister(mutex)
  locks.delete(mutex)
end

Private Instance Methods

finalize_callback() click to toggle source
# File lib/mb/lock_manager.rb, line 112
def finalize_callback
  log.debug { "Lock Manager stopping..." }
end