summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/database/migrations
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 19:00:14 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 19:00:14 +0000
commit05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch)
tree11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /spec/lib/gitlab/database/migrations
parentec73467c23693d0db63a797d10194da9e72a74af (diff)
downloadgitlab-ce-05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2.tar.gz
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'spec/lib/gitlab/database/migrations')
-rw-r--r--spec/lib/gitlab/database/migrations/instrumentation_spec.rb29
-rw-r--r--spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb22
2 files changed, 36 insertions, 15 deletions
diff --git a/spec/lib/gitlab/database/migrations/instrumentation_spec.rb b/spec/lib/gitlab/database/migrations/instrumentation_spec.rb
index 3540a120b8f..b0bdbf5c371 100644
--- a/spec/lib/gitlab/database/migrations/instrumentation_spec.rb
+++ b/spec/lib/gitlab/database/migrations/instrumentation_spec.rb
@@ -2,6 +2,8 @@
require 'spec_helper'
RSpec.describe Gitlab::Database::Migrations::Instrumentation do
+ subject(:instrumentation) { described_class.new(result_dir: result_dir) }
+
let(:result_dir) { Dir.mktmpdir }
let(:connection) { ActiveRecord::Migration.connection }
@@ -9,17 +11,18 @@ RSpec.describe Gitlab::Database::Migrations::Instrumentation do
FileUtils.rm_rf(result_dir)
end
describe '#observe' do
- subject { described_class.new(result_dir: result_dir) }
-
def load_observation(result_dir, migration_name)
Gitlab::Json.parse(File.read(File.join(result_dir, migration_name, described_class::STATS_FILENAME)))
end
let(:migration_name) { 'test' }
let(:migration_version) { '12345' }
+ let(:migration_meta) { { 'max_batch_size' => 1, 'total_tuple_count' => 10, 'interval' => 60 } }
it 'executes the given block' do
- expect { |b| subject.observe(version: migration_version, name: migration_name, connection: connection, &b) }.to yield_control
+ expect do |b|
+ instrumentation.observe(version: migration_version, name: migration_name, connection: connection, meta: migration_meta, &b)
+ end.to yield_control
end
context 'behavior with observers' do
@@ -68,13 +71,17 @@ RSpec.describe Gitlab::Database::Migrations::Instrumentation do
end
context 'on successful execution' do
- subject { described_class.new(result_dir: result_dir).observe(version: migration_version, name: migration_name, connection: connection) {} }
+ subject do
+ instrumentation.observe(version: migration_version, name: migration_name,
+ connection: connection, meta: migration_meta) {}
+ end
it 'records a valid observation', :aggregate_failures do
expect(subject.walltime).not_to be_nil
expect(subject.success).to be_truthy
expect(subject.version).to eq(migration_version)
expect(subject.name).to eq(migration_name)
+ expect(subject.meta).to eq(migration_meta)
end
end
@@ -82,9 +89,10 @@ RSpec.describe Gitlab::Database::Migrations::Instrumentation do
where(exception: ['something went wrong', SystemStackError, Interrupt])
with_them do
- let(:instance) { described_class.new(result_dir: result_dir) }
-
- subject(:observe) { instance.observe(version: migration_version, name: migration_name, connection: connection) { raise exception } }
+ subject(:observe) do
+ instrumentation.observe(version: migration_version, name: migration_name,
+ connection: connection, meta: migration_meta) { raise exception }
+ end
it 'raises the exception' do
expect { observe }.to raise_error(exception)
@@ -106,14 +114,13 @@ RSpec.describe Gitlab::Database::Migrations::Instrumentation do
expect(subject['success']).to be_falsey
expect(subject['version']).to eq(migration_version)
expect(subject['name']).to eq(migration_name)
+ expect(subject['meta']).to include(migration_meta)
end
end
end
end
context 'sequence of migrations with failures' do
- subject { described_class.new(result_dir: result_dir) }
-
let(:migration1) { double('migration1', call: nil) }
let(:migration2) { double('migration2', call: nil) }
@@ -121,9 +128,9 @@ RSpec.describe Gitlab::Database::Migrations::Instrumentation do
let(:migration_version_2) { '98765' }
it 'records observations for all migrations' do
- subject.observe(version: migration_version, name: migration_name, connection: connection) {}
+ instrumentation.observe(version: migration_version, name: migration_name, connection: connection) {}
begin
- subject.observe(version: migration_version_2, name: migration_name_2, connection: connection) { raise 'something went wrong' }
+ instrumentation.observe(version: migration_version_2, name: migration_name_2, connection: connection) { raise 'something went wrong' }
rescue StandardError
nil
end
diff --git a/spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb b/spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb
index 73d69d55e5a..0b048617ce1 100644
--- a/spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb
+++ b/spec/lib/gitlab/database/migrations/test_batched_background_runner_spec.rb
@@ -69,12 +69,27 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
end
context 'running a real background migration' do
+ let(:interval) { 5.minutes }
+ let(:meta) { { "max_batch_size" => nil, "total_tuple_count" => nil, "interval" => interval } }
+
+ let(:params) do
+ {
+ version: nil,
+ connection: connection,
+ meta: {
+ interval: 300,
+ max_batch_size: nil,
+ total_tuple_count: nil
+ }
+ }
+ end
+
before do
queue_migration('CopyColumnUsingBackgroundMigrationJob',
table_name, :id,
:id, :data,
batch_size: 100,
- job_interval: 5.minutes) # job_interval is skipped when testing
+ job_interval: interval) # job_interval is skipped when testing
end
subject(:sample_migration) do
@@ -91,10 +106,9 @@ RSpec.describe Gitlab::Database::Migrations::TestBatchedBackgroundRunner, :freez
}.by_at_most(-1)
end
- it 'uses the correct connection to instrument the background migration' do
+ it 'uses the correct params to instrument the background migration' do
expect_next_instance_of(Gitlab::Database::Migrations::Instrumentation) do |instrumentation|
- expect(instrumentation).to receive(:observe).with(hash_including(connection: connection))
- .at_least(:once).and_call_original
+ expect(instrumentation).to receive(:observe).with(hash_including(params)).at_least(:once).and_call_original
end
subject