module Sequel::ThreadedServerBlock

Adds #with_server support for the sharded threaded connection pool.

Public Instance Methods

with_server(default_server, read_only_server=default_server) { || ... } click to toggle source

Set a default server/shard to use inside the block for the current thread.

# File lib/sequel/extensions/server_block.rb, line 131
def with_server(default_server, read_only_server=default_server)
  set_default_server(default_server, read_only_server)
  yield
ensure
  clear_default_server
end

Private Instance Methods

clear_default_server() click to toggle source

Remove the current default server for the current thread, restoring the previous default server.

# File lib/sequel/extensions/server_block.rb, line 147
def clear_default_server
  t = Sequel.current
  a = sync{@default_servers[t]}
  a.pop
  sync{@default_servers.delete(t)} if a.empty?
end
pick_server(server) click to toggle source

Use the server given to #with_server for the given thread, if appropriate.

Calls superclass method
# File lib/sequel/extensions/server_block.rb, line 155
def pick_server(server)
  a = sync{@default_servers[Sequel.current]}
  if !a || a.empty?
    super
  else
    # Hash handling required to work when loaded after arbitrary servers plugin.
    case server
    when :default, nil
      v = a[-1][0]
      v = @servers[v] unless v.is_a?(Hash)
      v
    when :read_only
      v = a[-1][1]
      v = @servers[v] unless v.is_a?(Hash)
      v
    else
      super
    end
  end
end
set_default_server(default_server, read_only_server=default_server) click to toggle source

Make the given server the new default server for the current thread.

# File lib/sequel/extensions/server_block.rb, line 141
def set_default_server(default_server, read_only_server=default_server)
  sync{(@default_servers[Sequel.current] ||= [])} << [default_server, read_only_server]
end