0
+ class LockError < ActiveRecord::ActiveRecordError
0
+ class LockTimeout < LockError
0
+ def self.included(base)
0
+ base.send(:extend, ClassMethods)
0
+ # Aquires an application level lock in the mysql server.
0
+ def aquire_lock(lock_name = table_name, wait_timeout = 0)
0
+ case c = connection.select_value("SELECT GET_LOCK(#{quote_value(lock_name)}, #{quote_value(wait_timeout)})")
0
+ raise LockError, "Error in locking mechanism"
0
+ raise LockError, "Unknown response from database: #{c.inspect}"
0
+ connection.select_one("SELECT RELEASE_LOCK(#{quote_value(lock_name)})")
0
+ # Aquires an application level lock in the mysql server. Throws Locking::LockTimeout if the
0
+ # lock cannot be aquired.
0
+ def aquire_lock!(lock_name = table_name, wait_timeout = 0, &block)
0
+ aquire_lock(lock_name, table_name, &block) or raise LockTimeout, 'Timeout waiting for lock'
Comments
No one has commented yet.