From 5656e8f3662bae80ac479901486524b67846fe88 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Mon, 11 Jun 2018 12:29:23 +0800 Subject: [PATCH] FIX: Can't boot Discourse with a read-only PG connection. --- .../postgresql_fallback_adapter.rb | 18 ++++++++---------- .../postgresql_fallback_adapter_spec.rb | 1 - 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb index 0bdcda39f1e..15afbbaf104 100644 --- a/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb +++ b/lib/active_record/connection_adapters/postgresql_fallback_adapter.rb @@ -17,8 +17,10 @@ class PostgreSQLFallbackHandler @initialized = false MessageBus.subscribe(DATABASE_DOWN_CHANNEL) do |payload| - RailsMultisite::ConnectionManagement.with_connection(payload.data['db']) do - clear_connections + if @initialized + RailsMultisite::ConnectionManagement.with_connection(payload.data['db']) do + clear_connections + end end end end @@ -28,14 +30,10 @@ class PostgreSQLFallbackHandler @thread = Thread.new do while true do - begin - thread = Thread.new { initiate_fallback_to_master } - thread.join - break if synchronize { @masters_down.hash.empty? } - sleep 10 - ensure - thread.kill - end + thread = Thread.new { initiate_fallback_to_master } + thread.join + break if synchronize { @masters_down.hash.empty? } + sleep 10 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 a4ca7ede22b..e8956db680a 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 @@ -27,7 +27,6 @@ describe ActiveRecord::ConnectionHandling do let(:postgresql_fallback_handler) { PostgreSQLFallbackHandler.instance } before do - skip("Figure out why this test leaks connections") postgresql_fallback_handler.initialized = true ['default', multisite_db].each do |db|