summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-06-06 09:09:59 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-06-06 09:09:59 +0000
commit8e6efd45b28775083e961c9e87a27713785efe96 (patch)
tree94798d70174cf025d3a01cc4cc3acb84cf951fe2 /spec
parentb49ebeb658fdd0283b7bf7265a0b24cf1b7e148a (diff)
downloadgitlab-ce-8e6efd45b28775083e961c9e87a27713785efe96.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/initializers/lograge_spec.rb56
-rw-r--r--spec/lib/gitlab/instrumentation_helper_spec.rb36
-rw-r--r--spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb114
3 files changed, 190 insertions, 16 deletions
diff --git a/spec/initializers/lograge_spec.rb b/spec/initializers/lograge_spec.rb
index 421f6373eff..651b0c8a9b8 100644
--- a/spec/initializers/lograge_spec.rb
+++ b/spec/initializers/lograge_spec.rb
@@ -120,6 +120,7 @@ RSpec.describe 'lograge', type: :request do
context 'with a log subscriber' do
include_context 'parsed logs'
+ include_context 'clear DB Load Balancing configuration'
let(:subscriber) { Lograge::LogSubscribers::ActionController.new }
@@ -195,9 +196,25 @@ RSpec.describe 'lograge', type: :request do
end
context 'with db payload' do
+ let(:db_load_balancing_logging_keys) do
+ %w[
+ db_primary_wal_count
+ db_replica_wal_count
+ db_replica_count
+ db_replica_cached_count
+ db_primary_count
+ db_primary_cached_count
+ db_primary_duration_s
+ db_replica_duration_s
+ ]
+ end
+
+ before do
+ ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
+ end
+
context 'when RequestStore is enabled', :request_store do
it 'includes db counters' do
- ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
subscriber.process_action(event)
expect(log_data).to include("db_count" => a_value >= 1, "db_write_count" => 0, "db_cached_count" => 0)
@@ -206,12 +223,47 @@ RSpec.describe 'lograge', type: :request do
context 'when RequestStore is disabled' do
it 'does not include db counters' do
- ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
subscriber.process_action(event)
expect(log_data).not_to include("db_count", "db_write_count", "db_cached_count")
end
end
+
+ context 'when load balancing is enabled' do
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(true)
+ end
+
+ context 'with db payload' do
+ context 'when RequestStore is enabled', :request_store do
+ it 'includes db counters for load balancing' do
+ subscriber.process_action(event)
+
+ expect(log_data).to include(*db_load_balancing_logging_keys)
+ end
+ end
+
+ context 'when RequestStore is disabled' do
+ it 'does not include db counters for load balancing' do
+ subscriber.process_action(event)
+
+ expect(log_data).not_to include(*db_load_balancing_logging_keys)
+ end
+ end
+ end
+ end
+
+ context 'when load balancing is disabled' do
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(false)
+ end
+
+ it 'does not include db counters for load balancing' do
+ subscriber.process_action(event)
+
+ expect(log_data).not_to include(*db_load_balancing_logging_keys)
+ end
+ end
end
end
end
diff --git a/spec/lib/gitlab/instrumentation_helper_spec.rb b/spec/lib/gitlab/instrumentation_helper_spec.rb
index 488324ccddc..28ae90d4947 100644
--- a/spec/lib/gitlab/instrumentation_helper_spec.rb
+++ b/spec/lib/gitlab/instrumentation_helper_spec.rb
@@ -117,6 +117,42 @@ RSpec.describe Gitlab::InstrumentationHelper do
end
end
end
+
+ context 'when load balancing is enabled' do
+ include_context 'clear DB Load Balancing configuration'
+
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(true)
+ end
+
+ it 'includes DB counts' do
+ subject
+
+ expect(payload).to include(db_replica_count: 0,
+ db_replica_cached_count: 0,
+ db_primary_count: 0,
+ db_primary_cached_count: 0,
+ db_primary_wal_count: 0,
+ db_replica_wal_count: 0)
+ end
+ end
+
+ context 'when load balancing is disabled' do
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(false)
+ end
+
+ it 'does not include DB counts' do
+ subject
+
+ expect(payload).not_to include(db_replica_count: 0,
+ db_replica_cached_count: 0,
+ db_primary_count: 0,
+ db_primary_cached_count: 0,
+ db_primary_wal_count: 0,
+ db_replica_wal_count: 0)
+ end
+ end
end
describe '.queue_duration_for_job' do
diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
index 1f20cf07e0d..dfdc1420eac 100644
--- a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
+++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
@@ -228,6 +228,8 @@ RSpec.describe Gitlab::SidekiqLogging::StructuredLogger do
end
context 'when the job performs database queries' do
+ include_context 'clear DB Load Balancing configuration'
+
before do
allow(Time).to receive(:now).and_return(timestamp)
allow(Process).to receive(:clock_gettime).and_call_original
@@ -248,28 +250,112 @@ RSpec.describe Gitlab::SidekiqLogging::StructuredLogger do
)
end
- it 'logs the database time' do
- expect(logger).to receive(:info).with(expected_start_payload).ordered
- expect(logger).to receive(:info).with(expected_end_payload_with_db).ordered
+ shared_examples 'performs database queries' do
+ it 'logs the database time', :aggregate_errors do
+ expect(logger).to receive(:info).with(expected_start_payload).ordered
+ expect(logger).to receive(:info).with(expected_end_payload_with_db).ordered
- call_subject(job, 'test_queue') do
- ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
+ call_subject(job, 'test_queue') do
+ ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
+ end
+ end
+
+ it 'prevents database time from leaking to the next job', :aggregate_errors do
+ expect(logger).to receive(:info).with(expected_start_payload).ordered
+ expect(logger).to receive(:info).with(expected_end_payload_with_db).ordered
+ expect(logger).to receive(:info).with(expected_start_payload).ordered
+ expect(logger).to receive(:info).with(expected_end_payload).ordered
+
+ call_subject(job.dup, 'test_queue') do
+ ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
+ end
+
+ Gitlab::SafeRequestStore.clear!
+
+ call_subject(job.dup, 'test_queue') { }
end
end
- it 'prevents database time from leaking to the next job' do
- expect(logger).to receive(:info).with(expected_start_payload).ordered
- expect(logger).to receive(:info).with(expected_end_payload_with_db).ordered
- expect(logger).to receive(:info).with(expected_start_payload).ordered
- expect(logger).to receive(:info).with(expected_end_payload).ordered
+ context 'when load balancing is disabled' do
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(false)
+ end
- call_subject(job.dup, 'test_queue') do
- ActiveRecord::Base.connection.execute('SELECT pg_sleep(0.1);')
+ let(:expected_end_payload_with_db) do
+ expected_end_payload.merge(
+ 'db_duration_s' => a_value >= 0.1,
+ 'db_count' => a_value >= 1,
+ 'db_cached_count' => 0,
+ 'db_write_count' => 0
+ )
end
- Gitlab::SafeRequestStore.clear!
+ include_examples 'performs database queries'
+ end
+
+ context 'when load balancing is enabled' do
+ before do
+ allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(true)
+ end
- call_subject(job.dup, 'test_queue') { }
+ let(:expected_end_payload_with_db) do
+ expected_end_payload.merge(
+ 'db_duration_s' => a_value >= 0.1,
+ 'db_count' => a_value >= 1,
+ 'db_cached_count' => 0,
+ 'db_write_count' => 0,
+ 'db_replica_count' => 0,
+ 'db_replica_cached_count' => 0,
+ 'db_replica_wal_count' => 0,
+ 'db_replica_duration_s' => a_value >= 0,
+ 'db_primary_count' => a_value >= 1,
+ 'db_primary_cached_count' => 0,
+ 'db_primary_wal_count' => 0,
+ 'db_primary_duration_s' => a_value > 0
+ )
+ end
+
+ let(:end_payload) do
+ start_payload.merge(
+ 'message' => 'TestWorker JID-da883554ee4fe414012f5f42: done: 0.0 sec',
+ 'job_status' => 'done',
+ 'duration_s' => 0.0,
+ 'completed_at' => timestamp.to_f,
+ 'cpu_s' => 1.111112,
+ 'db_duration_s' => 0.0,
+ 'db_cached_count' => 0,
+ 'db_count' => 0,
+ 'db_write_count' => 0,
+ 'db_replica_count' => 0,
+ 'db_replica_cached_count' => 0,
+ 'db_replica_wal_count' => 0,
+ 'db_replica_duration_s' => 0,
+ 'db_primary_count' => 0,
+ 'db_primary_cached_count' => 0,
+ 'db_primary_wal_count' => 0,
+ 'db_primary_duration_s' => 0
+ )
+ end
+
+ include_examples 'performs database queries'
+ end
+ end
+
+ context 'when the job uses load balancing capabilities' do
+ let(:expected_payload) { { 'database_chosen' => 'retry' } }
+
+ before do
+ allow(Time).to receive(:now).and_return(timestamp)
+ allow(Process).to receive(:clock_gettime).and_call_original
+ end
+
+ it 'logs the database chosen' do
+ expect(logger).to receive(:info).with(start_payload).ordered
+ expect(logger).to receive(:info).with(include(expected_payload)).ordered
+
+ call_subject(job, 'test_queue') do
+ job[:database_chosen] = 'retry'
+ end
end
end