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.

Methods

Public Class methods

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.

[Source]

    # 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

Public Instance methods

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.

[Source]

    # 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

[Source]

    # 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.

[Source]

    # 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.

[Source]

    # 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

[Source]

    # 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.

[Source]

    # 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.

[Source]

    # File lib/sequel/connection_pool/sharded_single.rb, line 65
65:   def max_size
66:     1
67:   end

[Source]

    # 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.

[Source]

    # 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

Return an array of symbols for servers in the connection pool.

[Source]

    # File lib/sequel/connection_pool/sharded_single.rb, line 81
81:   def servers
82:     @servers.keys
83:   end

The number of different shards/servers this pool is connected to.

[Source]

    # File lib/sequel/connection_pool/sharded_single.rb, line 86
86:   def size
87:     @conns.length
88:   end

[Validate]