Class: GlobalUid::Base
- Inherits:
-
Object
- Object
- GlobalUid::Base
- Defined in:
- lib/global_uid/base.rb
Class Method Summary collapse
- .alert(exception) ⇒ Object
- .disconnect! ⇒ Object
- .id_table_from_name(name) ⇒ Object
- .init_server_info ⇒ Object
- .servers ⇒ Object
- .servers=(s) ⇒ Object
- .with_servers ⇒ Object
Class Method Details
.alert(exception) ⇒ Object
72 73 74 75 76 77 78 |
# 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! ⇒ Object
29 30 31 32 |
# 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) ⇒ Object
68 69 70 |
# File 'lib/global_uid/base.rb', line 68 def self.id_table_from_name(name) "#{name}_ids".to_sym end |
.init_server_info ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# 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 ⇒ Object
9 10 11 12 |
# 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) ⇒ Object
14 15 16 |
# File 'lib/global_uid/base.rb', line 14 def self.servers=(s) Thread.current["global_uid_servers_#{$$}"] = s end |
.with_servers ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# 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 = errors.empty? ? "" : "Errors hit: #{errors.map(&:to_s).join(', ')}" exception = NoServersAvailableException.new() GlobalUid.configuration.notifier.call(exception) raise exception end servers end |