Commit 91a764b7 authored by Nick Thomas's avatar Nick Thomas Committed by Mayra Cabrera
Browse files

Merge branch '5266-fix-fdw-check' into 'master'

Execute FDW SystemChecks only in Geo Secondary node

Closes #5266

See merge request gitlab-org/gitlab-ee!4970
parent e002bb39
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@ module SystemCheck
  module Geo
    class FdwEnabledCheck < SystemCheck::BaseCheck
      set_name 'GitLab Geo tracking database is configured to use Foreign Data Wrapper?'
      set_skip_reason 'Geo is not enabled'
      set_skip_reason 'not a secondary node'

      def skip?
        !Gitlab::Geo.enabled?
        !Gitlab::Geo.secondary?
      end

      def check?
+6 −4
Original line number Diff line number Diff line
@@ -2,17 +2,19 @@ module SystemCheck
  module Geo
    class FdwSchemaUpToDateCheck < SystemCheck::BaseCheck
      set_name 'GitLab Geo tracking database Foreign Data Wrapper schema is up-to-date?'
      set_skip_reason 'Geo is not enabled'

      NOT_SECONDARY_NODE = 'not a secondary node'.freeze
      FDW_NOT_CONFIGURED = 'foreign data wrapper is not configured'.freeze

      def skip?
        unless Gitlab::Geo.enabled?
          self.skip_reason = 'Geo is not enabled'
        unless Gitlab::Geo.secondary?
          self.skip_reason = NOT_SECONDARY_NODE

          return true
        end

        unless Gitlab::Geo::Fdw.enabled?
          self.skip_reason = 'Foreign Data Wrapper is not configured'
          self.skip_reason = FDW_NOT_CONFIGURED

          return true
        end
+36 −0
Original line number Diff line number Diff line
require 'spec_helper'
require 'rake_helper'

describe SystemCheck::Geo::FdwEnabledCheck, :geo do
  describe '#skip?' do
    subject { described_class.new.skip? }

    it 'skips when Geo is disabled' do
      allow(Gitlab::Geo).to receive(:enabled?) { false }

      is_expected.to be_truthy
    end

    it 'skips when Geo is enabled but its a primary node' do
      allow(Gitlab::Geo).to receive(:enabled?) { true }
      allow(Gitlab::Geo).to receive(:secondary?) { false }

      is_expected.to be_truthy
    end

    it 'does not skip when Geo is enabled and its a secondary node' do
      allow(Gitlab::Geo).to receive(:enabled?) { true }
      allow(Gitlab::Geo).to receive(:secondary?) { true }

      is_expected.to be_falsey
    end
  end

  describe '#check?' do
    context 'with functional FDW environment', :geo_tracking_db do
      it 'returns true' do
        expect(subject.check?).to be_truthy
      end
    end
  end
end
+44 −0
Original line number Diff line number Diff line
require 'spec_helper'
require 'rake_helper'

describe SystemCheck::Geo::FdwSchemaUpToDateCheck, :geo do
  describe '#skip?' do
    it 'skips when Geo is disabled' do
      allow(Gitlab::Geo).to receive(:enabled?) { false }

      expect(subject.skip?).to be_truthy
      expect(subject.skip_reason).to eq('not a secondary node')
    end

    it 'skips when Geo is enabled but its a primary node' do
      allow(Gitlab::Geo).to receive(:enabled?) { true }
      allow(Gitlab::Geo).to receive(:secondary?) { false }

      expect(subject.skip?).to be_truthy
      expect(subject.skip_reason).to eq('not a secondary node')
    end

    it 'skips when FDW is disabled' do
      allow(Gitlab::Geo).to receive(:enabled?) { true }
      allow(Gitlab::Geo).to receive(:secondary?) { true }
      allow(Gitlab::Geo::Fdw).to receive(:enabled?) { false }

      expect(subject.skip?).to be_truthy
      expect(subject.skip_reason).to eq('foreign data wrapper is not configured')
    end

    it 'does not skip when Geo is enabled, its a secondary node and FDW is enabled' do
      allow(Gitlab::Geo).to receive(:enabled?) { true }
      allow(Gitlab::Geo).to receive(:secondary?) { true }
      allow(Gitlab::Geo::Fdw).to receive(:enabled?) { true }

      expect(subject.skip?).to be_falsey
    end
  end

  context 'with functional FDW environment', :geo_tracking_db do
    it 'returns true' do
      expect(subject.check?).to be_truthy
    end
  end
end
+4 −0
Original line number Diff line number Diff line
@@ -200,6 +200,10 @@
    example.run if Gitlab::Database.postgresql?
  end

  config.around(:each, :geo_tracking_db) do |example|
    example.run if Gitlab::Geo.geo_database_configured?
  end

  config.around(:each, :postgresql) do |example|
    example.run if Gitlab::Database.postgresql?
  end