From 7d5b6e2b3cc00efb7f43fb2a24ac3b73a6835b10 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 1 Aug 2017 23:07:52 +0900 Subject: [PATCH] Disable MessageBus's keepalive when Redis is readonly. --- lib/discourse_redis.rb | 9 ++++++++- spec/components/discourse_redis_spec.rb | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/discourse_redis.rb b/lib/discourse_redis.rb index fccbb050e38..f646cba58e8 100644 --- a/lib/discourse_redis.rb +++ b/lib/discourse_redis.rb @@ -15,6 +15,7 @@ class DiscourseRedis @mutex = Mutex.new @slave_config = DiscourseRedis.slave_config @timer_task = init_timer_task + @message_bus_keepalive_interval = MessageBus.keepalive_interval end def verify_master @@ -41,6 +42,7 @@ class DiscourseRedis slave_client.call([:client, [:kill, 'type', connection_type]]) end + MessageBus.keepalive_interval = @message_bus_keepalive_interval Discourse.clear_readonly! Discourse.request_refresh! success = true @@ -57,7 +59,12 @@ class DiscourseRedis end def master=(args) - synchronize { @master = args } + synchronize do + @master = args + + # Disables MessageBus keepalive when Redis is in readonly mode + MessageBus.keepalive_interval = 0 if !@master + end end def running? diff --git a/spec/components/discourse_redis_spec.rb b/spec/components/discourse_redis_spec.rb index 41009bfc0ae..3a6873becb8 100644 --- a/spec/components/discourse_redis_spec.rb +++ b/spec/components/discourse_redis_spec.rb @@ -99,7 +99,9 @@ describe DiscourseRedis do 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) + expect(MessageBus.keepalive_interval).to eq(0) end it 'should fallback to the master server once it is up' do @@ -113,6 +115,7 @@ describe DiscourseRedis do expect(fallback_handler.initiate_fallback_to_master).to eq(true) expect(fallback_handler.master).to eq(true) expect(Discourse.recently_readonly?).to eq(false) + expect(MessageBus.keepalive_interval).to eq(-1) end end end