Failover::Configs specs pass

This commit is contained in:
2011-01-31 09:31:46 +00:00
parent 5496445d4d
commit 5d4cf18d2d
5 changed files with 24 additions and 45 deletions

View File

@@ -20,7 +20,7 @@ module AMQP
attr_accessor :fallback
def initialize(confs = nil, opts = {})
@configs = Configs.new(confs)
@configs = Failover::Configs.new(confs)
@options = default_options.merge(opts)
end
@@ -32,7 +32,7 @@ module AMQP
def default_options
{ :retry_timeout => 1,
:selection => :sequential, #TODO: Impliment next server selection algorithm
:fallback => false,
:fallback => false, #TODO: Enable by default once a sane solution is found
:fallback_interval => 10 }
end
@@ -56,17 +56,6 @@ module AMQP
@configs ||= Config.new
end
def configs=(confs = [])
@configs = nil
confs.each do |conf|
if conf.is_a?(Array)
add_config(conf[1], conf[0])
else
add_config(conf)
end
end
end
def add_config(conf = {}, ref = nil)
index = configs.index(conf)
configs << Config::Failed.new(conf) if index.nil?

View File

@@ -7,10 +7,14 @@ module AMQP
attr_accessor :last_fail
def initialize(hash = {}, last_fail_date = nil)
self.replace(symbolize_keys(hash))
self.replace(symbolize_keys(defaults.merge(hash)))
self.last_fail = last_fail_date if last_fail_date
end
def defaults
AMQP.settings
end
def symbolize_keys(hash = {})
hash.inject({}) do |result, (key, value)|
result[key.is_a?(String) ? key.to_sym : key] = value
@@ -30,7 +34,7 @@ module AMQP
end
return other.last_fail <=> self.last_fail
end
return 0
super(other)
end
end # Config

View File

@@ -46,7 +46,7 @@ module AMQP
end
def set(conf = {}, ref = nil)
conf = Config.new(default_config.merge(conf))
conf = Failover::Config.new(conf) if !conf.is_a?(Failover::Config)
self << conf if (index = self.index(conf)).nil?
if ref
refs[ref] = (index || self.index(conf))
@@ -75,7 +75,7 @@ module AMQP
end
end
def self.load_array(confs = [])
def load_array(confs = [])
self.clear
confs.each do |conf|
conf = AMQP::Client.parse_amqp_url(conf) if conf.is_a?(::String)
@@ -84,11 +84,7 @@ module AMQP
end
def load_hash(conf = {})
set(Config.new(conf))
end
def default_config
AMQP.settings
set(conf)
end
end # Config

View File

@@ -38,7 +38,9 @@ module AMQP
logger.error(log_message)
logger.info(log_message)
fallback(@failover.primary, @failover.fallback_interval) if @failover.primary == @settings
if @failover.options[:fallback] && @failover.primary == @settings
fallback(@failover.primary, @failover.fallback_interval)
end
@settings = new_settings
reconnect
else
@@ -53,6 +55,7 @@ module AMQP
end
def fallback_callback
#TODO: Figure out a way to artificially trigger EM to disconnect on fallback without channels being closed.
@fallback_callback ||= proc { |conf, retry_interval|
clean_exit("Primary server (#{conf[:host]}:#{conf[:port]}) is back. " +
"Performing clean exit to be relaunched with primary config.")