class Capistrano::ConsulKvLock::Latch

Attributes

lock_key[R]

Public Class Methods

instance() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 26
def self.instance
  @_instance
end
logger() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 30
def self.logger
  @_logger ||= SSHKittyLogger.new
end
new(consul_url, options={}) click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 34
def initialize(consul_url, options={})
  Diplomat.configuration.url = consul_url
  @lock_key = options[:consul_lock_key] || 'deployment/locked'
  @session_id = nil
end
set_instance(consul_url, options={}) click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 20
def self.set_instance(consul_url, options={})
  @_instance ||= new(consul_url, options)
  logger.debug "Registered latch instance: #{@_instance.inspect}"
  @_instance
end

Public Instance Methods

create_session() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 63
def create_session
  logger.debug "Session request: #{session_request.inspect}"
  @session_id = Diplomat::Session.create(session_request)
end
delete_session() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 68
def delete_session
  with_session {
    Diplomat::Session.destroy(@session_id)
  }
  @session_id = nil
end
lock() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 75
def lock
  with_session { Diplomat::Lock.acquire(lock_key, @session_id, "true") }
end
locked?() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 52
def locked?
  !!(Diplomat::Kv.get(lock_key) =~ /\A(t(rue)?|1|y(es)?)\z/)
rescue => e
  # in case of 404
  if e.message.include?('404')
    return false
  else
    raise e
  end
end
logger() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 41
def logger
  self.class.logger
end
session_request() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 45
def session_request
  {
    "LockDelay" => 15,
    "Name" => "lock-for-#{lock_key.tr("/", "-")}",
  }
end
unlock() click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 79
def unlock
  with_session { Diplomat::Lock.release(lock_key, @session_id) }
end

Private Instance Methods

with_session(&blk) click to toggle source
# File lib/capistrano/consul_kv_lock/latch.rb, line 84
def with_session &blk
  return false unless @session_id
  blk.call
  return true
end