mirror of
https://github.com/discourse/discourse.git
synced 2025-06-08 00:27:32 +08:00
FIX: Redis hostname may resolve to nothing.
This commit is contained in:
@ -81,7 +81,10 @@ class DiscourseRedis
|
|||||||
client = ::Redis::Client.new(options)
|
client = ::Redis::Client.new(options)
|
||||||
client.call([:role])[0]
|
client.call([:role])[0]
|
||||||
@options
|
@options
|
||||||
rescue Redis::ConnectionError, Redis::CannotConnectError => ex
|
rescue Redis::ConnectionError, Redis::CannotConnectError, RuntimeError => ex
|
||||||
|
# A consul service name may be deregistered for a redis container setup
|
||||||
|
raise ex if ex.class == RuntimeError && ex.message != "Name or service not known"
|
||||||
|
|
||||||
return @slave_options if !@fallback_handler.master
|
return @slave_options if !@fallback_handler.master
|
||||||
@fallback_handler.master = false
|
@fallback_handler.master = false
|
||||||
raise ex
|
raise ex
|
||||||
|
@ -53,6 +53,28 @@ describe DiscourseRedis do
|
|||||||
fallback_handler.master = true
|
fallback_handler.master = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should return the slave config when master's hostname cannot be resolved" do
|
||||||
|
begin
|
||||||
|
error = RuntimeError.new('Name or service not known')
|
||||||
|
|
||||||
|
Redis::Client.any_instance.expects(:call).raises(error).twice
|
||||||
|
expect { connector.resolve }.to raise_error(error)
|
||||||
|
|
||||||
|
config = connector.resolve
|
||||||
|
|
||||||
|
expect(config[:host]).to eq(slave_host)
|
||||||
|
expect(config[:port]).to eq(slave_port)
|
||||||
|
ensure
|
||||||
|
fallback_handler.master = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise the right error" do
|
||||||
|
error = RuntimeError.new('test error')
|
||||||
|
Redis::Client.any_instance.expects(:call).raises(error).twice
|
||||||
|
2.times { expect { connector.resolve }.to raise_error(error) }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe DiscourseRedis::FallbackHandler do
|
describe DiscourseRedis::FallbackHandler do
|
||||||
|
Reference in New Issue
Block a user