Fix background migrations failing with unused replication slot

When there is an unused replication slot, the replication lag function
will return a nil value, resulting in "NoMethodError: undefined method
`>=' for nil:NilClass" error. We now just ignore these nil values.

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/63666
This commit is contained in:
Stan Hu 2019-06-25 08:33:18 -07:00
parent 30131a3aca
commit d092ed178f
3 changed files with 14 additions and 1 deletions

View File

@ -28,7 +28,7 @@ module Postgresql
# We force the use of a transaction here so the query always goes to the # We force the use of a transaction here so the query always goes to the
# primary, even when using the EE DB load balancer. # primary, even when using the EE DB load balancer.
sizes = transaction { pluck(lag_function) } 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 # If too many replicas are falling behind too much, the availability of a
# GitLab instance might suffer. To prevent this from happening we require # GitLab instance might suffer. To prevent this from happening we require

View File

@ -0,0 +1,5 @@
---
title: Fix background migrations failing with unused replication slot
merge_request: 30042
author:
type: fixed

View File

@ -47,5 +47,13 @@ describe Postgresql::ReplicationSlot, :postgresql do
expect(described_class.lag_too_great?).to eq(false) expect(described_class.lag_too_great?).to eq(false)
end 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
end end