| Class | Sequel::ShardedSingleConnectionPool |
| In: |
lib/sequel/connection_pool/sharded_single.rb
|
| Parent: | Sequel::ConnectionPool |
A ShardedSingleConnectionPool is a single threaded connection pool that works with multiple shards/servers.
Initializes the instance with the supplied block as the connection_proc.
The single threaded pool takes the following options:
# File lib/sequel/connection_pool/sharded_single.rb, line 11
11: def initialize(opts={}, &block)
12: super
13: @conns = {}
14: @servers = Hash.new(:default)
15: add_servers([:default])
16: add_servers(opts[:servers].keys) if opts[:servers]
17: end
Adds new servers to the connection pool. Primarily used in conjunction with master/slave or shard configurations. Allows for dynamic expansion of the potential slaves/shards at runtime. servers argument should be an array of symbols.
# File lib/sequel/connection_pool/sharded_single.rb, line 22
22: def add_servers(servers)
23: servers.each{|s| @servers[s] = s}
24: end
The connection for the given server.
# File lib/sequel/connection_pool/sharded_single.rb, line 27
27: def conn(server=:default)
28: @conns[@servers[server]]
29: end
Disconnects from the database. Once a connection is requested using hold, the connection is reestablished. Options:
# File lib/sequel/connection_pool/sharded_single.rb, line 35
35: def disconnect(opts={}, &block)
36: block ||= @disconnection_proc
37: (opts[:server] ? Array(opts[:server]) : servers).each{|s| disconnect_server(s, &block)}
38: end
Yields the connection to the supplied block for the given server. This method simulates the ConnectionPool#hold API.
# File lib/sequel/connection_pool/sharded_single.rb, line 42
42: def hold(server=:default)
43: begin
44: server = @servers[server]
45: yield(@conns[server] ||= make_new(server))
46: rescue Sequel::DatabaseDisconnectError
47: disconnect_server(server, &@disconnection_proc)
48: raise
49: end
50: end
Remove servers from the connection pool. Primarily used in conjunction with master/slave or shard configurations. Similar to disconnecting from all given servers, except that after it is used, future requests for the server will use the :default server instead.
# File lib/sequel/connection_pool/sharded_single.rb, line 56
56: def remove_servers(servers)
57: raise(Sequel::Error, "cannot remove default server") if servers.include?(:default)
58: servers.each do |server|
59: disconnect_server(server, &@disconnection_proc)
60: @servers.delete(server)
61: end
62: end