lib/rsched/dblock.rb in rsched-0.2.0 vs lib/rsched/dblock.rb in rsched-0.3.0
- old
+ new
@@ -2,13 +2,12 @@
module RSched
class DBLock < Lock
def initialize(hostname, timeout, uri, user, pass)
+ super(hostname, timeout)
require 'dbi'
- @hostname = hostname
- @timeout = timeout
@db = DBI.connect(uri, user, pass)
init_db
end
def init_db
@@ -45,10 +44,17 @@
n = @db.do('UPDATE rsched SET finish=? WHERE ident = ? AND time = ? AND host = ?;',
now, ident, time, @hostname)
return n > 0
end
+ 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
+
def delete_before(ident, time)
@db.do('DELETE FROM rsched WHERE ident = ? AND time < ? AND finish IS NOT NULL;', ident, time)
end
private
@@ -59,11 +65,11 @@
rescue # TODO unique error
return false
end
def try_update(ident, time, now)
- n = @db.do('UPDATE rsched SET host=?, timeout=? WHERE ident = ? AND time = ? AND finish IS NULL AND (timeout < ? OR host = ?);',
- @hostname, now+@timeout, ident, time, now, @hostname)
+ n = @db.do('UPDATE rsched SET host=?, timeout=? WHERE ident = ? AND time = ? AND finish IS NULL AND timeout < ?;',
+ @hostname, now+@timeout, ident, time, now)
return n > 0
end
def check_finished(ident, time)
x = @db.select_one('SELECT finish FROM rsched WHERE ident = ? AND time = ? AND finish IS NOT NULL;',