Ability to check if underlying database is read only
This commit is contained in:
parent
0b1543e1c9
commit
fd2ea94f60
2 changed files with 44 additions and 0 deletions
|
@ -42,6 +42,21 @@ module Gitlab
|
|||
!self.read_only?
|
||||
end
|
||||
|
||||
# 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'
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def self.db_read_write?
|
||||
!self.db_read_only?
|
||||
end
|
||||
|
||||
def self.version
|
||||
@version ||= database_version.match(/\A(?:PostgreSQL |)([^\s]+).*\z/)[1]
|
||||
end
|
||||
|
|
|
@ -357,6 +357,35 @@ describe Gitlab::Database do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.db_read_only?' 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)
|
||||
end
|
||||
|
||||
it 'detects a read only database' do
|
||||
allow(ActiveRecord::Base.connection).to receive(:execute).with('SELECT pg_is_in_recovery()').and_return([{ "pg_is_in_recovery" => "t" }])
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
context 'when using MySQL' do
|
||||
before do
|
||||
expect(described_class).to receive(:postgresql?).and_return(false)
|
||||
end
|
||||
|
||||
it { expect(described_class.db_read_only?).to be_falsey }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#sanitize_timestamp' do
|
||||
let(:max_timestamp) { Time.at((1 << 31) - 1) }
|
||||
|
||||
|
|
Loading…
Reference in a new issue