module Sequel::ConnectionExpiration
Attributes
connection_expiration_random_delay[RW]
The maximum number of seconds that will be added as a random delay to the expiration timeout Defaults to 0 seconds (no random delay).
connection_expiration_timeout[RW]
The number of seconds that need to pass since connection creation before expiring a connection. Defaults to 14400 seconds (4 hours).
Public Class Methods
extended(pool)
click to toggle source
Initialize the data structures used by this extension.
# File lib/sequel/extensions/connection_expiration.rb 46 def self.extended(pool) 47 pool.instance_exec do 48 sync do 49 @connection_expiration_timestamps ||= {} 50 @connection_expiration_timeout ||= 14400 51 @connection_expiration_random_delay ||= 0 52 end 53 end 54 end
Private Instance Methods
acquire(*a)
click to toggle source
When acquiring a connection, check if the connection is expired. If it is expired, disconnect the connection, and retry with a new connection.
Calls superclass method
# File lib/sequel/extensions/connection_expiration.rb 74 def acquire(*a) 75 begin 76 if (conn = super) && 77 (cet = sync{@connection_expiration_timestamps[conn]}) && 78 Sequel.elapsed_seconds_since(cet[0]) > cet[1] 79 80 if pool_type == :sharded_threaded 81 sync{allocated(a.last).delete(Thread.current)} 82 else 83 sync{@allocated.delete(Thread.current)} 84 end 85 86 disconnect_connection(conn) 87 raise Retry 88 end 89 rescue Retry 90 retry 91 end 92 93 conn 94 end
disconnect_connection(conn)
click to toggle source
Clean up expiration timestamps during disconnect.
Calls superclass method
# File lib/sequel/extensions/connection_expiration.rb 59 def disconnect_connection(conn) 60 sync{@connection_expiration_timestamps.delete(conn)} 61 super 62 end
make_new(*)
click to toggle source
Record the time the connection was created.
Calls superclass method
# File lib/sequel/extensions/connection_expiration.rb 65 def make_new(*) 66 conn = super 67 @connection_expiration_timestamps[conn] = [Sequel.start_timer, @connection_expiration_timeout + (rand * @connection_expiration_random_delay)].freeze 68 conn 69 end