class CassandraLock::Client

Attributes

id[R]

Public Class Methods

new(contact_points, keyspace, id=nil) click to toggle source
# File lib/cassandra_lock/client.rb, line 8
def initialize(contact_points, keyspace, id=nil)
  cluster = Cassandra.cluster hosts: contact_points
  @cassandra = cluster.connect keyspace
  @id = id || SecureRandom.uuid
  @LOCK = @cassandra.prepare "INSERT INTO leases (name, owner) VALUES (?,?) IF NOT EXISTS"
  @KEEPALIVE = @cassandra.prepare "UPDATE leases set owner = ? where name = ? IF owner = ?"
  @UNLOCK = @cassandra.prepare "DELETE FROM leases where name = ? IF owner = ?"
end

Public Instance Methods

keep_alive(resource) click to toggle source
# File lib/cassandra_lock/client.rb, line 22
def keep_alive(resource)
  @cassandra.execute(@KEEPALIVE, @id, resource, @id)
end
lock(resource) click to toggle source
# File lib/cassandra_lock/client.rb, line 17
def lock(resource)
  result = @cassandra.execute(@LOCK, resource, @id)
  result.first["[applied]"]
end
unlock(resource) click to toggle source
# File lib/cassandra_lock/client.rb, line 26
def unlock(resource)
  @cassandra.execute(@UNLOCK, resource, @id)
end