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 133 def with_server(default_server, read_only_server=default_server) begin set_default_server(default_server, read_only_server) yield ensure clear_default_server end 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 151 def clear_default_server t = Thread.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 159 def pick_server(server) a = sync{@default_servers[Thread.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 145 def set_default_server(default_server, read_only_server=default_server) sync{(@default_servers[Thread.current] ||= [])} << [default_server, read_only_server] end