class GlobalUid::Base
Public Class Methods
alert(exception)
click to toggle source
# File lib/global_uid/base.rb, line 72 def self.alert(exception) if GlobalUid.configuration.suppress_increment_exceptions? GlobalUid.configuration.notifier.call(exception) else raise exception end end
disconnect!()
click to toggle source
# File lib/global_uid/base.rb, line 29 def self.disconnect! servers.each(&:disconnect!) unless servers.nil? self.servers = nil end
id_table_from_name(name)
click to toggle source
# File lib/global_uid/base.rb, line 68 def self.id_table_from_name(name) "#{name}_ids".to_sym end
init_server_info()
click to toggle source
# File lib/global_uid/base.rb, line 18 def self.init_server_info GlobalUid.configuration.id_servers.map do |name| GlobalUid::Server.new(name, increment_by: GlobalUid.configuration.increment_by, connection_retry: GlobalUid.configuration.connection_retry, connection_timeout: GlobalUid.configuration.connection_timeout, query_timeout: GlobalUid.configuration.query_timeout ) end.shuffle # so each process uses a random server end
servers()
click to toggle source
# File lib/global_uid/base.rb, line 9 def self.servers # Thread local storage is inheritted on `fork`, include the pid Thread.current["global_uid_servers_#{$$}"] end
servers=(s)
click to toggle source
# File lib/global_uid/base.rb, line 14 def self.servers=(s) Thread.current["global_uid_servers_#{$$}"] = s end
with_servers() { |server| ... }
click to toggle source
# File lib/global_uid/base.rb, line 34 def self.with_servers self.servers ||= init_server_info servers = self.servers.each(&:connect) if GlobalUid.configuration.connection_shuffling? servers.shuffle! # subsequent requests are made against different servers end errors = [] servers.each do |server| begin yield server if server.active? rescue TimeoutException, Exception => e GlobalUid.configuration.notifier.call(e) errors << e server.disconnect! server.update_retry_at(1.minute) end end # in the case where all servers are gone, put everyone back in. if servers.all?(&:disconnected?) servers.each do |server| server.update_retry_at(0) end message = errors.empty? ? "" : "Errors hit: #{errors.map(&:to_s).join(', ')}" exception = NoServersAvailableException.new(message) GlobalUid.configuration.notifier.call(exception) raise exception end servers end