class Sequel::ShardedSingleFailoverConnectionPool
Attributes
on_reset[RW]
on_retry[RW]
Public Class Methods
clear_on_reset_callbacks()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 30 def clear_on_reset_callbacks @on_reset.clear end
clear_on_retry_callbacks()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 22 def clear_on_retry_callbacks @on_retry.clear end
new(db, opts = OPTS)
click to toggle source
Calls superclass method
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 5 def initialize(db, opts = OPTS) super @pool_stick_timeout = opts[:pool_stick_timeout] || 15 @pool_retry_count = opts[:pool_retry_count] || 5 @failing_over = false end
register_on_reset_callback(callback)
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 26 def register_on_reset_callback(callback) @on_reset << callback end
register_on_retry_callback(callback)
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 18 def register_on_retry_callback(callback) @on_retry << callback end
Public Instance Methods
failing_over?()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 72 def failing_over? !!@failing_over end
failover!()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 68 def failover! @failing_over = true end
hold(server=:default, &block)
click to toggle source
Yields the connection to the supplied block for the given server. This method simulates the ConnectionPool#hold API.
Calls superclass method
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 38 def hold(server=:default, &block) reset_retries(:read_only) if failover_timed_out?(server) loop do begin @response = super(server, &block) break rescue Sequel::DatabaseDisconnectError, Sequel::DatabaseConnectionError => e raise if server != :read_only increment_retries unless self.class.on_retry.empty? self.class.on_retry.each { |callback| callback.call(e, self) } end if @retry_count >= @pool_retry_count reset_retries(server) raise end end end @response end
pool_type()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 64 def pool_type :sharded_single_failover end
reset_retries(server)
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 76 def reset_retries(server) unless self.class.on_reset.empty? self.class.on_reset.each { |callback| callback.call(self) } end probe(server.to_s) { |p| p.unstick } disconnect_server(server) @conns[server] = nil @failing_over = false @failed_at = nil @retry_count = nil end
Private Instance Methods
failover_timed_out?(server)
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 90 def failover_timed_out?(server) server == :read_only && @failed_at && Time.now.to_i - @failed_at.to_i >= @pool_stick_timeout end
increment_retries()
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 96 def increment_retries failover! @retry_count ||= 0 probe(@retry_count) { |p| p.stick } @failed_at ||= Time.now @retry_count += 1 end
probe(*args) { |provider| ... }
click to toggle source
# File lib/sequel/connection_pool/sharded_single_failover.rb, line 104 def probe(*args) p = yield(Sequel::ReplicaFailover::DTraceProvider.provider) return unless p.enabled? if args.any? p.fire(*args) else p.fire end end