mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 22:43:33 +08:00
PERF: Spawn a seperate timer task to check if Redis master is up.
This commit is contained in:
@ -42,7 +42,7 @@ describe DiscourseRedis do
|
||||
|
||||
it 'should return the slave config when master is down' do
|
||||
begin
|
||||
Redis::Client.any_instance.expects(:call).raises(Redis::CannotConnectError).twice
|
||||
Redis::Client.any_instance.expects(:call).raises(Redis::CannotConnectError).once
|
||||
expect { connector.resolve }.to raise_error(Redis::CannotConnectError)
|
||||
|
||||
config = connector.resolve
|
||||
@ -58,7 +58,7 @@ describe DiscourseRedis do
|
||||
begin
|
||||
error = RuntimeError.new('Name or service not known')
|
||||
|
||||
Redis::Client.any_instance.expects(:call).raises(error).twice
|
||||
Redis::Client.any_instance.expects(:call).raises(error).once
|
||||
expect { connector.resolve }.to raise_error(error)
|
||||
|
||||
config = connector.resolve
|
||||
@ -79,34 +79,27 @@ describe DiscourseRedis do
|
||||
|
||||
describe DiscourseRedis::FallbackHandler do
|
||||
after do
|
||||
fallback_handler.reset!
|
||||
fallback_handler.master = true
|
||||
end
|
||||
|
||||
describe '#initiate_fallback_to_master' do
|
||||
it 'should fallback to the master server once it is up' do
|
||||
begin
|
||||
fallback_handler.master = false
|
||||
Redis::Client.any_instance.expects(:call).with([:info]).returns(DiscourseRedis::FallbackHandler::MASTER_LINK_STATUS)
|
||||
|
||||
DiscourseRedis::FallbackHandler::CONNECTION_TYPES.each do |connection_type|
|
||||
Redis::Client.any_instance.expects(:call).with([:client, [:kill, 'type', connection_type]])
|
||||
end
|
||||
|
||||
fallback_handler.initiate_fallback_to_master
|
||||
|
||||
expect(fallback_handler.master).to eq(true)
|
||||
expect(Discourse.recently_readonly?).to eq(false)
|
||||
ensure
|
||||
fallback_handler.master = true
|
||||
end
|
||||
it 'should return the right value if the master server is still down' do
|
||||
fallback_handler.master = false
|
||||
Redis::Client.any_instance.expects(:call).with([:info]).returns("Some other stuff")
|
||||
expect(fallback_handler.initiate_fallback_to_master).to eq(false)
|
||||
end
|
||||
|
||||
it "should restrict the number of checks" do
|
||||
expect { fallback_handler.verify_master }.to change { Thread.list.count }.by(1)
|
||||
expect(fallback_handler.master).to eq(true)
|
||||
|
||||
it 'should fallback to the master server once it is up' do
|
||||
fallback_handler.master = false
|
||||
expect { fallback_handler.verify_master }.to_not change { Thread.list.count }
|
||||
Redis::Client.any_instance.expects(:call).with([:info]).returns(DiscourseRedis::FallbackHandler::MASTER_LINK_STATUS)
|
||||
|
||||
DiscourseRedis::FallbackHandler::CONNECTION_TYPES.each do |connection_type|
|
||||
Redis::Client.any_instance.expects(:call).with([:client, [:kill, 'type', connection_type]])
|
||||
end
|
||||
|
||||
expect(fallback_handler.initiate_fallback_to_master).to eq(true)
|
||||
expect(fallback_handler.master).to eq(true)
|
||||
expect(Discourse.recently_readonly?).to eq(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user