acquire(lock, &block)
click to toggle source
def acquire(lock, &block)
Type! lock, Lock
lock.validate!
adapter.create_record(lock)
if block
begin
block.call
ensure
release(lock)
end
end
rescue DuplicateRecordError => e
raise LockError.new(e.record)
end
clean_orphaned_locks()
click to toggle source
def clean_orphaned_locks
cleanup_classes = [LockByWorld]
ret = []
cleanup_classes.each do |cleanup_class|
valid_owner_ids = cleanup_class.valid_owner_ids(self)
valid_classes = cleanup_class.valid_classes.map(&:name)
orphaned_locks = find_locks(class: valid_classes, exclude_owner_id: valid_owner_ids)
valid_owner_ids = cleanup_class.valid_owner_ids(self)
orphaned_locks.each do |lock|
unless valid_owner_ids.include?(lock.owner_id)
release(lock)
ret << lock
end
end
end
return ret
end
create_record(record)
click to toggle source
def create_record(record)
Type! record, Record
adapter.create_record(record)
end
deactivate_world(world)
click to toggle source
def deactivate_world(world)
Type! world, Coordinator::ExecutorWorld
world.active = false
update_record(world)
end
delete_record(record)
click to toggle source
def delete_record(record)
Type! record, Record
adapter.delete_record(record)
end
delete_world(world)
click to toggle source
def delete_world(world)
Type! world, Coordinator::ClientWorld, Coordinator::ExecutorWorld
release_by_owner("world:#{world.id}")
delete_record(world)
end
find_locks(filter_options)
click to toggle source
def find_locks(filter_options)
adapter.find_records(filter_options).map do |lock_data|
Lock.from_hash(lock_data)
end
end
find_records(filter)
click to toggle source
def find_records(filter)
adapter.find_records(filter).map do |record_data|
Record.from_hash(record_data)
end
end
find_worlds(active_executor_only = false, filters = {})
click to toggle source
def find_worlds(active_executor_only = false, filters = {})
ret = find_records(filters.merge(class: Coordinator::ExecutorWorld.name))
if active_executor_only
ret = ret.select(&:active?)
else
ret.concat(find_records(filters.merge(class: Coordinator::ClientWorld.name)))
end
ret
end
register_world(world)
click to toggle source
def register_world(world)
Type! world, Coordinator::ClientWorld, Coordinator::ExecutorWorld
create_record(world)
end
release(lock)
click to toggle source
def release(lock)
Type! lock, Lock
adapter.delete_record(lock)
end
release_by_owner(owner_id)
click to toggle source
def release_by_owner(owner_id)
find_locks(owner_id: owner_id).map { |lock| release(lock) }
end
update_record(record)
click to toggle source
def update_record(record)
Type! record, Record
adapter.update_record(record)
end