class Deb::S3::Lock

Attributes

host[RW]
user[RW]

Public Class Methods

current(codename, component = nil, architecture = nil, cache_control = nil) click to toggle source
# File lib/deb/s3/lock.rb, line 43
def current(codename, component = nil, architecture = nil, cache_control = nil)
  lock_content = Deb::S3::Utils.s3_read(lock_path(codename, component, architecture, cache_control))
  lock_content = lock_content.split('@')
  lock = Deb::S3::Lock.new
  lock.user = lock_content[0]
  lock.host = lock_content[1] if lock_content.size > 1
  lock
end
lock(codename, component = nil, architecture = nil, cache_control = nil) click to toggle source
# File lib/deb/s3/lock.rb, line 28
def lock(codename, component = nil, architecture = nil, cache_control = nil)
  lockfile = Tempfile.new("lockfile")
  lockfile.write("#{Etc.getlogin}@#{Socket.gethostname}")
  lockfile.close

  Deb::S3::Utils.s3_store(lockfile.path,
                          lock_path(codename, component, architecture, cache_control),
                          "text/plain",
                          cache_control)
end
locked?(codename, component = nil, architecture = nil, cache_control = nil) click to toggle source
# File lib/deb/s3/lock.rb, line 15
def locked?(codename, component = nil, architecture = nil, cache_control = nil)
  Deb::S3::Utils.s3_exists?(lock_path(codename, component, architecture, cache_control))
end
new() click to toggle source
# File lib/deb/s3/lock.rb, line 9
def initialize
  @user = nil
  @host = nil
end
unlock(codename, component = nil, architecture = nil, cache_control = nil) click to toggle source
# File lib/deb/s3/lock.rb, line 39
def unlock(codename, component = nil, architecture = nil, cache_control = nil)
  Deb::S3::Utils.s3_remove(lock_path(codename, component, architecture, cache_control))
end
wait_for_lock(codename, component = nil, architecture = nil, cache_control = nil, max_attempts=60, wait=10) click to toggle source
# File lib/deb/s3/lock.rb, line 19
def wait_for_lock(codename, component = nil, architecture = nil, cache_control = nil, max_attempts=60, wait=10)
  attempts = 0
  while self.locked?(codename, component, architecture, cache_control) do
    attempts += 1
    throw "Unable to obtain a lock after #{max_attempts}, giving up." if attempts > max_attempts
    sleep(wait)
  end
end

Private Class Methods

lock_path(codename, component = nil, architecture = nil, cache_control = nil) click to toggle source
# File lib/deb/s3/lock.rb, line 53
def lock_path(codename, component = nil, architecture = nil, cache_control = nil)
  "dists/#{codename}/#{component}/binary-#{architecture}/lockfile"
end