summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Brandl <abrandl@gitlab.com>2019-06-27 12:36:00 +0000
committerAndreas Brandl <abrandl@gitlab.com>2019-06-27 12:36:00 +0000
commit5c4d0dc69be52c7cb2a24ee7fe13c96c621994ea (patch)
tree4c56437e1671025a52fd9d0e09a0cbc4dca75004
parent47089be063b754b3cc76c47bda7d26876889e5de (diff)
parentd092ed178fe490769f60df2e1ce8a667b812fc79 (diff)
downloadgitlab-ce-5c4d0dc69be52c7cb2a24ee7fe13c96c621994ea.tar.gz
Merge branch 'sh-handle-nil-replication-lag' into 'master'
Fix background migrations failing with unused replication slot Closes #63666 See merge request gitlab-org/gitlab-ce!30042
-rw-r--r--app/models/postgresql/replication_slot.rb2
-rw-r--r--changelogs/unreleased/sh-handle-nil-replication-lag.yml5
-rw-r--r--spec/models/postgresql/replication_slot_spec.rb8
3 files changed, 14 insertions, 1 deletions
diff --git a/app/models/postgresql/replication_slot.rb b/app/models/postgresql/replication_slot.rb
index 74ccf23cf69..7a123deb719 100644
--- a/app/models/postgresql/replication_slot.rb
+++ b/app/models/postgresql/replication_slot.rb
@@ -28,7 +28,7 @@ module Postgresql
# We force the use of a transaction here so the query always goes to the
# primary, even when using the EE DB load balancer.
sizes = transaction { pluck(lag_function) }
- too_great = sizes.count { |size| size >= max }
+ too_great = sizes.compact.count { |size| size >= max }
# If too many replicas are falling behind too much, the availability of a
# GitLab instance might suffer. To prevent this from happening we require
diff --git a/changelogs/unreleased/sh-handle-nil-replication-lag.yml b/changelogs/unreleased/sh-handle-nil-replication-lag.yml
new file mode 100644
index 00000000000..5638d7e79e3
--- /dev/null
+++ b/changelogs/unreleased/sh-handle-nil-replication-lag.yml
@@ -0,0 +1,5 @@
+---
+title: Fix background migrations failing with unused replication slot
+merge_request: 30042
+author:
+type: fixed
diff --git a/spec/models/postgresql/replication_slot_spec.rb b/spec/models/postgresql/replication_slot_spec.rb
index e100af7ddc7..95ae204a8a8 100644
--- a/spec/models/postgresql/replication_slot_spec.rb
+++ b/spec/models/postgresql/replication_slot_spec.rb
@@ -47,5 +47,13 @@ describe Postgresql::ReplicationSlot, :postgresql do
expect(described_class.lag_too_great?).to eq(false)
end
+
+ it 'returns false when there is a nil replication lag' do
+ expect(described_class)
+ .to receive(:pluck)
+ .and_return([0.megabytes, nil])
+
+ expect(described_class.lag_too_great?).to eq(false)
+ end
end
end