diff --git a/app/services/projects/after_rename_service.rb b/app/services/projects/after_rename_service.rb index 2a35a07d55541175a02ea2d8d292fdf7622ace54..f9022b3afe3d3fca3423c70de5e960efb84f8d6a 100644 --- a/app/services/projects/after_rename_service.rb +++ b/app/services/projects/after_rename_service.rb @@ -96,9 +96,23 @@ module Projects .rename_project(path_before, project_path, namespace_full_path) end - Gitlab::PagesTransfer - .new - .rename_project(path_before, project_path, namespace_full_path) + if ::Feature.enabled?(:async_pages_move_project_rename, project) + # Block will be evaluated in the context of project so we need + # to bind to a local variable to capture it, as the instance + # variable and method aren't available on Project + path_before_local = @path_before + + project.run_after_commit_or_now do + Gitlab::PagesTransfer + .new + .async + .rename_project(path_before_local, path, namespace.full_path) + end + else + Gitlab::PagesTransfer + .new + .rename_project(path_before, project_path, namespace_full_path) + end end def log_completion diff --git a/config/feature_flags/development/async_pages_move_project_rename.yml b/config/feature_flags/development/async_pages_move_project_rename.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f5d30a6420ff7972768c6f2150e8ea7482218b8 --- /dev/null +++ b/config/feature_flags/development/async_pages_move_project_rename.yml @@ -0,0 +1,7 @@ +--- +name: async_pages_move_project_rename +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40087 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/235802 +group: team::Scalability +type: development +default_enabled: false diff --git a/spec/services/projects/after_rename_service_spec.rb b/spec/services/projects/after_rename_service_spec.rb index 52136b37c66df7ed065e37068b545f66bdfac6fc..11e3604c38ac2636c1f8c2f9faf8c60fb2535c26 100644 --- a/spec/services/projects/after_rename_service_spec.rb +++ b/spec/services/projects/after_rename_service_spec.rb @@ -62,11 +62,21 @@ RSpec.describe Projects::AfterRenameService do context 'gitlab pages' do before do - expect(project_storage).to receive(:rename_repo) { true } + allow(project_storage).to receive(:rename_repo) { true } + end + + context 'when async_pages_move_project_rename is disabled' do + it 'moves pages folder to new location' do + stub_feature_flags(async_pages_move_project_rename: false) + + expect_any_instance_of(Gitlab::PagesTransfer).to receive(:rename_project) + + service_execute + end end - it 'moves pages folder to new location' do - expect_any_instance_of(Gitlab::PagesTransfer).to receive(:rename_project) + it 'schedules a move of the pages directory' do + expect(PagesTransferWorker).to receive(:perform_async).with('rename_project', anything) service_execute end @@ -160,8 +170,18 @@ RSpec.describe Projects::AfterRenameService do end context 'gitlab pages' do - it 'moves pages folder to new location' do - expect_any_instance_of(Gitlab::PagesTransfer).to receive(:rename_project) + context 'when async_pages_move_project_rename is disabled' do + it 'moves pages folder to new location' do + stub_feature_flags(async_pages_move_project_rename: false) + + expect_any_instance_of(Gitlab::PagesTransfer).to receive(:rename_project) + + service_execute + end + end + + it 'schedules a move of the pages directory' do + expect(PagesTransferWorker).to receive(:perform_async).with('rename_project', anything) service_execute end