class Sequel::ConnectionPool
The base connection pool class, which all other connection pools are based on. This class is not instantiated directly, but subclasses should at the very least implement the following API:
- initialize(Database,
Hash
) -
Initialize using the passed
Sequel::Database
object and options hash. - hold(
Symbol
, &block) -
Yield a connection object (obtained from calling the block passed to
initialize
) to the current block. For sharded connection pools, theSymbol
passed is the shard/server to use. - disconnect(
Symbol
) -
Disconnect the connection object. For sharded connection pools, the
Symbol
passed is the shard/server to use. - servers
-
An array of shard/server symbols for all shards/servers that this connection pool recognizes.
- size
-
an integer representing the total number of connections in the pool, or for the given shard/server if sharding is supported.
- max_size
-
an integer representing the maximum size of the connection pool, or the maximum size per shard/server if sharding is supported.
For sharded connection pools, the sharded API adds the following methods:
- add_servers(
Array
of Symbols) -
start recognizing all shards/servers specified by the array of symbols.
- remove_servers(
Array
of Symbols) -
no longer recognize all shards/servers specified by the array of symbols.
Constants
- OPTS
- POOL_CLASS_MAP
Attributes
The after_connect
proc used for this pool. This is called with each new connection made, and is usually used to set custom per-connection settings. Deprecated.
An array of sql strings to execute on each new connection. Deprecated.
The Sequel::Database
object tied to this connection pool.
Public Class Methods
Instantiates a connection pool with the given Database and options.
# File lib/sequel/connection_pool.rb 111 def initialize(db, opts=OPTS) # SEQUEL6: Remove second argument, always use db.opts 112 @db = db 113 @use_old_connect_api = false # SEQUEL6: Remove 114 @after_connect = opts[:after_connect] # SEQUEL6: Remove 115 @connect_sqls = opts[:connect_sqls] # SEQUEL6: Remove 116 @error_classes = db.send(:database_error_classes).dup.freeze 117 end
Public Instance Methods
Override the after_connect
proc for the connection pool. Deprecated. Disables support for shard-specific :after_connect and :connect_sqls if used.
# File lib/sequel/connection_pool.rb 92 def after_connect=(v) # SEQUEL6: Remove 93 @use_old_connect_api = true 94 @after_connect = v 95 end
Override the connect_sqls
for the connection pool. Deprecated. Disables support for shard-specific :after_connect and :connect_sqls if used.
# File lib/sequel/connection_pool.rb 102 def connect_sqls=(v) # SEQUEL6: Remove 103 @use_old_connect_api = true 104 @connect_sqls = v 105 end
An array of symbols for all shards/servers, which is a single :default
by default.
# File lib/sequel/connection_pool.rb 120 def servers 121 [:default] 122 end
Private Instance Methods
Remove the connection from the pool. For threaded connections, this should be called without the mutex, because the disconnection may block.
# File lib/sequel/connection_pool.rb 128 def disconnect_connection(conn) 129 db.disconnect_connection(conn) 130 end
Whether the given exception is a disconnect exception.
# File lib/sequel/connection_pool.rb 133 def disconnect_error?(exception) 134 exception.is_a?(Sequel::DatabaseDisconnectError) || db.send(:disconnect_error?, exception, OPTS) 135 end
Return a new connection by calling the connection proc with the given server name, and checking for connection errors.
# File lib/sequel/connection_pool.rb 139 def make_new(server) 140 begin 141 if @use_old_connect_api 142 # SEQUEL6: Remove block 143 conn = @db.connect(server) 144 145 if ac = @after_connect 146 if ac.arity == 2 147 ac.call(conn, server) 148 else 149 ac.call(conn) 150 end 151 end 152 153 if cs = @connect_sqls 154 cs.each do |sql| 155 db.send(:log_connection_execute, conn, sql) 156 end 157 end 158 159 conn 160 else 161 @db.new_connection(server) 162 end 163 rescue Exception=>exception 164 raise Sequel.convert_exception_class(exception, Sequel::DatabaseConnectionError) 165 end || raise(Sequel::DatabaseConnectionError, "Connection parameters not valid") 166 end