Class: Kaal::Internal::Sequel::DatabaseBackend
Overview
Shared table-backed Sequel SQL engine used by the public SQLite backend.
Instance Method Summary
collapse
#log_dispatch_attempt, #parse_lock_key, parse_lock_key
#with_lock
Constructor Details
#initialize(database, namespace: nil) ⇒ DatabaseBackend
Returns a new instance of DatabaseBackend.
18
19
20
21
22
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 18
def initialize(database, namespace: nil)
super()
@database = Kaal::Persistence::Database.new(database)
@namespace = namespace
end
|
Instance Method Details
#acquire(key, ttl) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 36
def acquire(key, ttl)
now = Time.now.utc
expires_at = now + ttl
2.times do |attempt|
cleanup_expired_locks if attempt.positive?
begin
dataset.insert(key: key, acquired_at: now, expires_at: expires_at)
log_dispatch_attempt(key)
return true
rescue ::Sequel::UniqueConstraintViolation
next
end
end
false
rescue StandardError => e
raise Kaal::Backend::LockAdapterError, "Database acquire failed for #{key}: #{e.message}"
end
|
#cleanup_expired_locks ⇒ Object
63
64
65
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 63
def cleanup_expired_locks
dataset.where { expires_at < Time.now.utc }.delete
end
|
#definition_registry ⇒ Object
28
29
30
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 28
def definition_registry
@definition_registry ||= Kaal::Definition::DatabaseEngine.new(database: @database.connection)
end
|
#delayed_store ⇒ Object
32
33
34
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 32
def delayed_store
@delayed_store ||= Kaal::DelayedJob::DatabaseEngine.new(database: @database.connection)
end
|
#dispatch_registry ⇒ Object
24
25
26
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 24
def dispatch_registry
@dispatch_registry ||= Kaal::Dispatch::DatabaseEngine.new(database: @database.connection, namespace: resolved_namespace)
end
|
#release(key) ⇒ Object
57
58
59
60
61
|
# File 'lib/kaal/internal/sequel/database_backend.rb', line 57
def release(key)
dataset.where(key: key).delete.positive?
rescue StandardError => e
raise Kaal::Backend::LockAdapterError, "Database release failed for #{key}: #{e.message}"
end
|