| 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.
The single threaded pool takes the following options:
# File lib/sequel/connection_pool/sharded_single.rb, line 12
12: def initialize(db, opts={})
13: super
14: @conns = {}
15: @servers = opts.fetch(:servers_hash, Hash.new(:default))
16: add_servers([:default])
17: add_servers(opts[:servers].keys) if opts[:servers]
18: 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 23
23: def add_servers(servers)
24: servers.each{|s| @servers[s] = s}
25: end
Yield all of the currently established connections
# File lib/sequel/connection_pool/sharded_single.rb, line 28
28: def all_connections
29: @conns.values.each{|c| yield c}
30: end
The connection for the given server.
# File lib/sequel/connection_pool/sharded_single.rb, line 33
33: def conn(server=:default)
34: @conns[@servers[server]]
35: 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 41
41: def disconnect(opts={})
42: (opts[:server] ? Array(opts[:server]) : servers).each{|s| disconnect_server(s)}
43: 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 47
47: def hold(server=:default)
48: begin
49: server = pick_server(server)
50: yield(@conns[server] ||= make_new(server))
51: rescue Sequel::DatabaseDisconnectError
52: disconnect_server(server)
53: raise
54: end
55: end
# File lib/sequel/connection_pool/sharded_single.rb, line 79
79: def pool_type
80: :sharded_single
81: 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 61
61: def remove_servers(servers)
62: raise(Sequel::Error, "cannot remove default server") if servers.include?(:default)
63: servers.each do |server|
64: disconnect_server(server)
65: @servers.delete(server)
66: end
67: end