diff --git a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb index 5f4f1b95492..812f8d2168c 100644 --- a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb +++ b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb @@ -16,8 +16,8 @@ class PostgreSQLFallbackHandler @mutex = Mutex.new @initialized = false - MessageBus.subscribe(DATABASE_DOWN_CHANNEL) do |payload| - if @initialized + MessageBus.subscribe(DATABASE_DOWN_CHANNEL) do |payload, pid| + if @initialized && pid != Process.pid RailsMultisite::ConnectionManagement.with_connection(payload.data['db']) do clear_connections end @@ -49,7 +49,7 @@ class PostgreSQLFallbackHandler synchronize do @masters_down[namespace] = true Sidekiq.pause! if !Sidekiq.paused? - MessageBus.publish(DATABASE_DOWN_CHANNEL, db: namespace) + MessageBus.publish(DATABASE_DOWN_CHANNEL, db: namespace, pid: Process.pid) end end diff --git a/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb b/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb index 1c07fa49398..d3c7c9d0cda 100644 --- a/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb +++ b/spec/components/active_record/connection_adapters/postgresql_fallback_adapter_spec.rb @@ -37,6 +37,8 @@ describe ActiveRecord::ConnectionHandling do after do postgresql_fallback_handler.setup! Discourse.disable_readonly_mode(Discourse::PG_READONLY_MODE_KEY) + ActiveRecord::Base.unstub(:postgresql_connection) + ActiveRecord::Base.establish_connection end describe "#postgresql_fallback_connection" do @@ -53,7 +55,6 @@ describe ActiveRecord::ConnectionHandling do context 'when master server is down' do before do - @replica_connection = mock('replica_connection') end