diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-06 09:09:59 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-06 09:09:59 +0000 |
commit | 8e6efd45b28775083e961c9e87a27713785efe96 (patch) | |
tree | 94798d70174cf025d3a01cc4cc3acb84cf951fe2 /spec | |
parent | b49ebeb658fdd0283b7bf7265a0b24cf1b7e148a (diff) | |
download | gitlab-ce-8e6efd45b28775083e961c9e87a27713785efe96.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/initializers/lograge_spec.rb | 56 | ||||
-rw-r--r-- | spec/lib/gitlab/instrumentation_helper_spec.rb | 36 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb | 114 |
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 |