Rails5: Fix the check whether the database is in read-only mode

Rails 5 returns true/false instead of a string 't' or 'f'.
parent 3cd52365
---
title: 'Rails 5: Fix the check whether the database is in read-only mode'
merge_request: 8594
author:
type: fixed
......@@ -51,9 +51,11 @@ module Gitlab
# check whether the underlying database is in read-only mode
def self.db_read_only?
if postgresql?
ActiveRecord::Base.connection.execute('SELECT pg_is_in_recovery()')
.first
.fetch('pg_is_in_recovery') == 't'
pg_is_in_recovery =
ActiveRecord::Base.connection.execute('SELECT pg_is_in_recovery()')
.first.fetch('pg_is_in_recovery')
Gitlab::Utils.to_boolean(pg_is_in_recovery)
else
false
end
......
......@@ -495,7 +495,7 @@ describe Gitlab::Database do
context 'when using PostgreSQL' do
before do
allow(ActiveRecord::Base.connection).to receive(:execute).and_call_original
expect(described_class).to receive(:postgresql?).and_return(true)
allow(described_class).to receive(:postgresql?).and_return(true)
end
it 'detects a read only database' do
......@@ -504,11 +504,25 @@ describe Gitlab::Database do
expect(described_class.db_read_only?).to be_truthy
end
# TODO: remove rails5-only tag after removing rails4 tests
it 'detects a read only database', :rails5 do
allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => true }])
expect(described_class.db_read_only?).to be_truthy
end
it 'detects a read write database' do
allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => "f" }])
expect(described_class.db_read_only?).to be_falsey
end
# TODO: remove rails5-only tag after removing rails4 tests
it 'detects a read write database', :rails5 do
allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => false }])
expect(described_class.db_read_only?).to be_falsey
end
end
context 'when using MySQL' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment