mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 02:41:13 +08:00
FIX: Improve failover for multisite clusters (#11150)
- Bump rails_failover for new per-backend callback feature - If the master backend fails over, make all sites readonly. And vice-versa for fallback - If a single backend fails over, make that individual site readonly. And vice-versa for fallback - When a single backend fails, also check connection to the master backend
This commit is contained in:
@ -448,6 +448,10 @@ module Discourse
|
||||
]
|
||||
|
||||
def self.enable_readonly_mode(key = READONLY_MODE_KEY)
|
||||
if key == PG_READONLY_MODE_KEY || key == PG_FORCE_READONLY_MODE_KEY
|
||||
Sidekiq.pause!("pg_failover") if !Sidekiq.paused?
|
||||
end
|
||||
|
||||
if key == USER_READONLY_MODE_KEY || key == PG_FORCE_READONLY_MODE_KEY
|
||||
Discourse.redis.set(key, 1)
|
||||
else
|
||||
@ -497,6 +501,10 @@ module Discourse
|
||||
end
|
||||
|
||||
def self.disable_readonly_mode(key = READONLY_MODE_KEY)
|
||||
if key == PG_READONLY_MODE_KEY || key == PG_FORCE_READONLY_MODE_KEY
|
||||
Sidekiq.unpause! if Sidekiq.paused?
|
||||
end
|
||||
|
||||
Discourse.redis.del(key)
|
||||
MessageBus.publish(readonly_channel, false)
|
||||
true
|
||||
@ -505,7 +513,6 @@ module Discourse
|
||||
def self.enable_pg_force_readonly_mode
|
||||
RailsMultisite::ConnectionManagement.each_connection do
|
||||
enable_readonly_mode(PG_FORCE_READONLY_MODE_KEY)
|
||||
Sidekiq.pause!("pg_failover") if !Sidekiq.paused?
|
||||
end
|
||||
|
||||
true
|
||||
@ -514,7 +521,6 @@ module Discourse
|
||||
def self.disable_pg_force_readonly_mode
|
||||
RailsMultisite::ConnectionManagement.each_connection do
|
||||
disable_readonly_mode(PG_FORCE_READONLY_MODE_KEY)
|
||||
Sidekiq.unpause!
|
||||
end
|
||||
|
||||
true
|
||||
|
Reference in New Issue
Block a user