Class: RSched::DBLock
Instance Attribute Summary
Attributes inherited from Lock
Instance Method Summary collapse
- #acquire(ident, time, now = Time.now.to_i) ⇒ Object
- #delete_before(ident, time) ⇒ Object
- #extend_timeout(token, timeout = Time.now.to_i+@timeout) ⇒ Object
- #finish(token, now = Time.now.to_i) ⇒ Object
- #init_db ⇒ Object
-
#initialize(hostname, timeout, uri, user, pass) ⇒ DBLock
constructor
A new instance of DBLock.
- #release(token) ⇒ Object
Constructor Details
#initialize(hostname, timeout, uri, user, pass) ⇒ DBLock
6 7 8 9 10 11 |
# File 'lib/rsched/dblock.rb', line 6 def initialize(hostname, timeout, uri, user, pass) super(hostname, timeout) require 'dbi' @db = DBI.connect(uri, user, pass) init_db end |
Instance Method Details
#acquire(ident, time, now = Time.now.to_i) ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/rsched/dblock.rb', line 25 def acquire(ident, time, now=Time.now.to_i) if try_insert(ident, time, now) || try_update(ident, time, now) return [ident, time] elsif check_finished(ident, time) return nil else return false end end |
#delete_before(ident, time) ⇒ Object
56 57 58 |
# File 'lib/rsched/dblock.rb', line 56 def delete_before(ident, time) @db.do('DELETE FROM rsched WHERE ident = ? AND time < ? AND finish IS NOT NULL;', ident, time) end |
#extend_timeout(token, timeout = Time.now.to_i+@timeout) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/rsched/dblock.rb', line 49 def extend_timeout(token, timeout=Time.now.to_i+@timeout) ident, time = *token n = @db.do('UPDATE rsched SET timeout=? WHERE ident = ? AND time = ? AND host = ?;', timeout, ident, time, @hostname) return n > 0 end |
#finish(token, now = Time.now.to_i) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/rsched/dblock.rb', line 42 def finish(token, now=Time.now.to_i) ident, time = *token n = @db.do('UPDATE rsched SET finish=? WHERE ident = ? AND time = ? AND host = ?;', now, ident, time, @hostname) return n > 0 end |
#init_db ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/rsched/dblock.rb', line 13 def init_db sql = '' sql << 'CREATE TABLE IF NOT EXISTS rsched (' sql << ' ident VARCHAR(256) NOT NULL,' sql << ' time INT NOT NULL,' sql << ' host VARCHAR(256),' sql << ' timeout INT,' sql << ' finish INT,' sql << ' PRIMARY KEY (ident, time));' @db.execute(sql) end |
#release(token) ⇒ Object
35 36 37 38 39 40 |
# File 'lib/rsched/dblock.rb', line 35 def release(token) ident, time = *token n = @db.do('UPDATE rsched SET timeout=? WHERE ident = ? AND time = ? AND host = ?;', 0, ident, time, @hostname) return n > 0 end |