From ee4af0c64cdf00d2c34ce7feb773e057f9758cff Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Sat, 22 Dec 2018 04:01:24 +0100 Subject: Only set as `read_only` when starting the per-project migration In the previous code, we locked the project during the migration scheduling step, which works fine for small setups, but can be problematic in really big installations. We now moved the logic to inside the worker, so we minimize the time a project will be read-only. We also make sure we only do that if reference counter is `0` (no current operation is in progress). --- spec/lib/gitlab/hashed_storage/migrator_spec.rb | 32 +++++++++++++------------ 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'spec/lib') diff --git a/spec/lib/gitlab/hashed_storage/migrator_spec.rb b/spec/lib/gitlab/hashed_storage/migrator_spec.rb index 7eac2cacb90..01d43ed00a2 100644 --- a/spec/lib/gitlab/hashed_storage/migrator_spec.rb +++ b/spec/lib/gitlab/hashed_storage/migrator_spec.rb @@ -19,15 +19,6 @@ describe Gitlab::HashedStorage::Migrator do end end - it 'sets projects as read only' do - allow(ProjectMigrateHashedStorageWorker).to receive(:perform_async).twice - subject.bulk_migrate(ids.min, ids.max) - - projects.each do |project| - expect(project.reload.repository_read_only?).to be_truthy - end - end - it 'rescues and log exceptions' do allow_any_instance_of(Project).to receive(:migrate_to_hashed_storage!).and_raise(StandardError) expect { subject.bulk_migrate(ids.min, ids.max) }.not_to raise_error @@ -40,6 +31,16 @@ describe Gitlab::HashedStorage::Migrator do subject.bulk_migrate(ids.min, ids.max) end + + it 'has migrated projects set as writable' do + perform_enqueued_jobs do + subject.bulk_migrate(ids.min, ids.max) + end + + projects.each do |project| + expect(project.reload.repository_read_only?).to be_falsey + end + end end describe '#migrate' do @@ -57,19 +58,20 @@ describe Gitlab::HashedStorage::Migrator do expect { subject.migrate(project) }.not_to raise_error end - it 'sets project as read only' do - allow(ProjectMigrateHashedStorageWorker).to receive(:perform_async) - subject.migrate(project) + it 'migrate project' do + perform_enqueued_jobs do + subject.migrate(project) + end - expect(project.reload.repository_read_only?).to be_truthy + expect(project.reload.hashed_storage?(:attachments)).to be_truthy end - it 'migrate project' do + it 'has migrated project set as writable' do perform_enqueued_jobs do subject.migrate(project) end - expect(project.reload.hashed_storage?(:attachments)).to be_truthy + expect(project.reload.repository_read_only?).to be_falsey end end end -- cgit v1.2.3