class MongoMutex::Mutex::MongoOperations

Public Instance Methods

lock_info(collection, lock_id) click to toggle source
# File lib/mongo_mutex/mutex.rb, line 80
def lock_info(collection, lock_id)
  collection.find({_id: lock_id}, limit: 1).first
end
try_lock(collection, lock_id, locker_id, now, lock_retention_timeout) click to toggle source
# File lib/mongo_mutex/mutex.rb, line 84
def try_lock(collection, lock_id, locker_id, now, lock_retention_timeout)
  collection.find_one_and_update(
    {:_id => lock_id, :$or => [
      {locked_at: {:$lt => now - lock_retention_timeout}},
      {locked_by: locker_id},
      {locked_by: {:$exists => 0}},
    ]},
    {_id: lock_id, locked_by: locker_id, locked_at: now},
    upsert: true,
  )
end
unlock(collection, lock_id, locker_id, now, lock_retention_support) click to toggle source
# File lib/mongo_mutex/mutex.rb, line 96
def unlock(collection, lock_id, locker_id, now, lock_retention_support)
  collection.find_one_and_update(
    {_id: lock_id, locked_by: locker_id, locked_at: {:$gte => now - lock_retention_support}},
    {:$unset => {locked_by: 1, locked_at: 1}},
  )
end