mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-30 10:58:31 -05:00
Internally AR::Base.establish_connection
removes the current connection.
This commit is contained in:
parent
a08496bb1a
commit
c532d7d1ae
2 changed files with 19 additions and 25 deletions
|
@ -24,7 +24,6 @@ class PostgreSQLFallbackHandler
|
|||
|
||||
if connection.active?
|
||||
logger.info "#{self.class}: Master server is active. Reconnecting..."
|
||||
ActiveRecord::Base.remove_connection
|
||||
ActiveRecord::Base.establish_connection(config)
|
||||
Discourse.disable_readonly_mode
|
||||
@master = true
|
||||
|
|
|
@ -27,40 +27,35 @@ describe ActiveRecord::ConnectionHandling do
|
|||
end
|
||||
|
||||
it 'should failover to a replica server' do
|
||||
begin
|
||||
ActiveRecord::Base.expects(:postgresql_connection).with(config).raises(PG::ConnectionBad)
|
||||
ActiveRecord::Base.expects(:verify_replica).with(@replica_connection)
|
||||
ActiveRecord::Base.expects(:postgresql_connection).with(config).raises(PG::ConnectionBad)
|
||||
ActiveRecord::Base.expects(:verify_replica).with(@replica_connection)
|
||||
|
||||
ActiveRecord::Base.expects(:postgresql_connection).with(config.merge({
|
||||
host: "localhost", port: "6432"
|
||||
})).returns(@replica_connection)
|
||||
ActiveRecord::Base.expects(:postgresql_connection).with(config.merge({
|
||||
host: "localhost", port: "6432"
|
||||
})).returns(@replica_connection)
|
||||
|
||||
expect { ActiveRecord::Base.postgresql_fallback_connection(config) }
|
||||
.to raise_error(PG::ConnectionBad)
|
||||
expect { ActiveRecord::Base.postgresql_fallback_connection(config) }
|
||||
.to raise_error(PG::ConnectionBad)
|
||||
|
||||
expect{ ActiveRecord::Base.postgresql_fallback_connection(config) }
|
||||
.to change{ Discourse.readonly_mode? }.from(false).to(true)
|
||||
expect{ ActiveRecord::Base.postgresql_fallback_connection(config) }
|
||||
.to change{ Discourse.readonly_mode? }.from(false).to(true)
|
||||
|
||||
ActiveRecord::Base.unstub(:postgresql_connection)
|
||||
ActiveRecord::Base.unstub(:postgresql_connection)
|
||||
|
||||
current_threads = Thread.list
|
||||
current_threads = Thread.list
|
||||
|
||||
expect{ ActiveRecord::Base.connection_pool.checkout }
|
||||
.to change{ Thread.list.size }.by(1)
|
||||
expect{ ActiveRecord::Base.connection_pool.checkout }
|
||||
.to change{ Thread.list.size }.by(1)
|
||||
|
||||
# Wait for the thread to finish execution
|
||||
threads = (Thread.list - current_threads).each(&:join)
|
||||
# Wait for the thread to finish execution
|
||||
threads = (Thread.list - current_threads).each(&:join)
|
||||
|
||||
expect(Discourse.readonly_mode?).to eq(false)
|
||||
expect(Discourse.readonly_mode?).to eq(false)
|
||||
|
||||
expect(ActiveRecord::Base.connection_pool.connections.count).to eq(0)
|
||||
expect(ActiveRecord::Base.connection_pool.connections.count).to eq(0)
|
||||
|
||||
expect(ActiveRecord::Base.connection)
|
||||
.to be_an_instance_of(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
||||
ensure
|
||||
# threads.each { |t| Thread.kill(t) } if threads
|
||||
ActiveRecord::Base.establish_connection(:test)
|
||||
end
|
||||
expect(ActiveRecord::Base.connection)
|
||||
.to be_an_instance_of(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue