diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-11-05 12:50:31 +0000 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2018-11-05 12:50:31 +0000 |
commit | 3eb57ceccd3b75c34993c77e329f7f08000f118f (patch) | |
tree | 1bf81ff4e3c18c317e56899b5cd3509d607a3960 | |
parent | a5fa8228f6d1c79431396a58ea289dc7a9a4b6d6 (diff) | |
parent | fd7f95ee7421f297e71f8fe81159b6d9df381e4c (diff) | |
download | gitlab-ce-3eb57ceccd3b75c34993c77e329f7f08000f118f.tar.gz |
Merge branch 'sh-fix-issue-52176' into 'master'
Disable replication lag check for Aurora PostgreSQL databases
Closes #52176
See merge request gitlab-org/gitlab-ce!22786
-rw-r--r-- | app/models/postgresql/replication_slot.rb | 11 | ||||
-rw-r--r-- | changelogs/unreleased/sh-fix-issue-52176.yml | 5 | ||||
-rw-r--r-- | spec/models/postgresql/replication_slot_spec.rb | 20 |
3 files changed, 36 insertions, 0 deletions
diff --git a/app/models/postgresql/replication_slot.rb b/app/models/postgresql/replication_slot.rb index 70c7432e6b5..e264fe88e47 100644 --- a/app/models/postgresql/replication_slot.rb +++ b/app/models/postgresql/replication_slot.rb @@ -4,6 +4,15 @@ module Postgresql class ReplicationSlot < ActiveRecord::Base self.table_name = 'pg_replication_slots' + # Returns true if there are any replication slots in use. + # PostgreSQL-compatible databases such as Aurora don't support + # replication slots, so this will return false as well. + def self.in_use? + transaction { exists? } + rescue ActiveRecord::StatementInvalid + false + end + # Returns true if the lag observed across all replication slots exceeds a # given threshold. # @@ -11,6 +20,8 @@ module Postgresql # statistics it takes between 1 and 5 seconds to replicate around # 100 MB of data. def self.lag_too_great?(max = 100.megabytes) + return false unless in_use? + lag_function = "#{Gitlab::Database.pg_wal_lsn_diff}" \ "(#{Gitlab::Database.pg_current_wal_insert_lsn}(), restart_lsn)::bigint" diff --git a/changelogs/unreleased/sh-fix-issue-52176.yml b/changelogs/unreleased/sh-fix-issue-52176.yml new file mode 100644 index 00000000000..7269e14d910 --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-52176.yml @@ -0,0 +1,5 @@ +--- +title: Disable replication lag check for Aurora PostgreSQL databases +merge_request: 22786 +author: +type: fixed diff --git a/spec/models/postgresql/replication_slot_spec.rb b/spec/models/postgresql/replication_slot_spec.rb index 919a7526803..e100af7ddc7 100644 --- a/spec/models/postgresql/replication_slot_spec.rb +++ b/spec/models/postgresql/replication_slot_spec.rb @@ -3,7 +3,27 @@ require 'spec_helper' describe Postgresql::ReplicationSlot, :postgresql do + describe '.in_use?' do + it 'returns true when replication slots are present' do + expect(described_class).to receive(:exists?).and_return(true) + expect(described_class.in_use?).to be_truthy + end + + it 'returns false when replication slots are not present' do + expect(described_class.in_use?).to be_falsey + end + + it 'returns false if the existence check is invalid' do + expect(described_class).to receive(:exists?).and_raise(ActiveRecord::StatementInvalid.new('PG::FeatureNotSupported')) + expect(described_class.in_use?).to be_falsey + end + end + describe '.lag_too_great?' do + before do + expect(described_class).to receive(:in_use?).and_return(true) + end + it 'returns true when replication lag is too great' do expect(described_class) .to receive(:pluck) |