| 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:
| :servers : | A hash of servers to use. Keys should be symbols. If not present, will use a single :default server. |
| :servers_hash : | The base hash to use for the servers. By default, Sequel uses Hash.new(:default). You can use a hash with a default proc that raises an error if you want to catch all cases where a nonexistent server is used. |
# File lib/sequel/connection_pool/sharded_single.rb, line 14
14: def initialize(db, opts=OPTS)
15: super
16: @conns = {}
17: @servers = opts.fetch(:servers_hash, Hash.new(:default))
18: add_servers([:default])
19: add_servers(opts[:servers].keys) if opts[:servers]
20: 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 25
25: def add_servers(servers)
26: servers.each{|s| @servers[s] = s}
27: end
Yield all of the currently established connections
# File lib/sequel/connection_pool/sharded_single.rb, line 30
30: def all_connections
31: @conns.values.each{|c| yield c}
32: end
The connection for the given server.
# File lib/sequel/connection_pool/sharded_single.rb, line 35
35: def conn(server=:default)
36: @conns[@servers[server]]
37: end
Disconnects from the database. Once a connection is requested using hold, the connection is reestablished. Options:
| :server : | Should be a symbol specifing the server to disconnect from, or an array of symbols to specify multiple servers. |
# File lib/sequel/connection_pool/sharded_single.rb, line 43
43: def disconnect(opts=OPTS)
44: (opts[:server] ? Array(opts[:server]) : servers).each{|s| disconnect_server(s)}
45: end
# File lib/sequel/connection_pool/sharded_single.rb, line 47
47: def freeze
48: @servers.freeze
49: super
50: 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 54
54: def hold(server=:default)
55: begin
56: server = pick_server(server)
57: yield(@conns[server] ||= make_new(server))
58: rescue Sequel::DatabaseDisconnectError, *@error_classes => e
59: disconnect_server(server) if disconnect_error?(e)
60: raise
61: end
62: end
The ShardedSingleConnectionPool always has a maximum size of 1.
# File lib/sequel/connection_pool/sharded_single.rb, line 65
65: def max_size
66: 1
67: end
# File lib/sequel/connection_pool/sharded_single.rb, line 90
90: def pool_type
91: :sharded_single
92: end
Remove servers from the connection pool. 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 72
72: def remove_servers(servers)
73: raise(Sequel::Error, "cannot remove default server") if servers.include?(:default)
74: servers.each do |server|
75: disconnect_server(server)
76: @servers.delete(server)
77: end
78: end