Commit 7cb2bbc3 authored by Andreas Brandl's avatar Andreas Brandl Committed by Stan Hu
parent dda5a172
# # frozen_string_literal: true
if Gitlab::Utils.to_boolean(ENV['ENABLE_ACTIVERECORD_EMPTY_PING'], default: false)
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Gitlab::Database::PostgresqlAdapter::EmptyQueryPing)
end
# frozen_string_literal: true
# rubocop:disable Gitlab/ModuleWithInstanceVariables
module Gitlab
module Database
module PostgresqlAdapter
module EmptyQueryPing
# ActiveRecord uses `SELECT 1` to check if the connection is alive
# We patch this here to use an empty query instead, which is a bit faster
def active?
@lock.synchronize do
@connection.query ';'
end
true
rescue PG::Error
false
end
end
end
end
end
# rubocop:enable Gitlab/ModuleWithInstanceVariables
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Database::PostgresqlAdapter::EmptyQueryPing do
describe '#active?' do
let(:adapter_class) do
Class.new do
include Gitlab::Database::PostgresqlAdapter::EmptyQueryPing
def initialize(connection, lock)
@connection = connection
@lock = lock
end
end
end
subject { adapter_class.new(connection, lock).active? }
let(:connection) { double(query: nil) }
let(:lock) { double }
before do
allow(lock).to receive(:synchronize).and_yield
end
it 'uses an empty query to check liveness' do
expect(connection).to receive(:query).with(';')
subject
end
it 'returns true if no error was signaled' do
expect(subject).to be_truthy
end
it 'returns false when an error occurs' do
expect(lock).to receive(:synchronize).and_raise(PG::Error)
expect(subject).to be_falsey
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment