Pause Sidekiq when postgres failovers.

This commit is contained in:
Guo Xiang Tan 2017-10-16 19:48:31 +08:00
parent 229a10e142
commit 5f76e5062d
2 changed files with 7 additions and 1 deletions

View File

@ -32,7 +32,10 @@ class PostgreSQLFallbackHandler
end end
def master_down=(args) def master_down=(args)
synchronize { @masters_down[namespace] = args } synchronize do
@masters_down[namespace] = args
Sidekiq.pause! if args
end
end end
def master_up(namespace) def master_up(namespace)
@ -53,6 +56,7 @@ class PostgreSQLFallbackHandler
self.master_up(key) self.master_up(key)
Discourse.disable_readonly_mode(Discourse::PG_READONLY_MODE_KEY) Discourse.disable_readonly_mode(Discourse::PG_READONLY_MODE_KEY)
Sidekiq.unpause!
end end
rescue => e rescue => e
logger.warn "#{log_prefix}: Connection to master PostgreSQL server failed with '#{e.message}'" logger.warn "#{log_prefix}: Connection to master PostgreSQL server failed with '#{e.message}'"

View File

@ -71,6 +71,7 @@ describe ActiveRecord::ConnectionHandling do
.to change { Discourse.readonly_mode? }.from(false).to(true) .to change { Discourse.readonly_mode? }.from(false).to(true)
expect(postgresql_fallback_handler.master_down?).to eq(true) expect(postgresql_fallback_handler.master_down?).to eq(true)
expect(Sidekiq.paused?).to eq(true)
with_multisite_db(multisite_db) do with_multisite_db(multisite_db) do
expect(postgresql_fallback_handler.master_down?).to eq(nil) expect(postgresql_fallback_handler.master_down?).to eq(nil)
@ -92,6 +93,7 @@ describe ActiveRecord::ConnectionHandling do
expect(Discourse.readonly_mode?).to eq(false) expect(Discourse.readonly_mode?).to eq(false)
expect(postgresql_fallback_handler.master_down?).to eq(nil) expect(postgresql_fallback_handler.master_down?).to eq(nil)
expect(Sidekiq.paused?).to eq(false)
expect(ActiveRecord::Base.connection_pool.connections.count).to eq(0) expect(ActiveRecord::Base.connection_pool.connections.count).to eq(0)
skip("Figuring out why the following keeps failing to obtain a connection on Travis") skip("Figuring out why the following keeps failing to obtain a connection on Travis")