Loading
Update projects controller to transfer async
What does this MR do and why?
Update projects controller to transfer async
Changes are behind groups_and_projects_async_transfer feature flag
Closes #586547 (closed)
References
Screenshots or screen recordings
| Before | After |
|---|---|
How to set up and validate locally
In rails console:
# 1. Enable the feature flag
Feature.enable(:groups_and_projects_async_transfer)
# 2. Create test data
user = User.find_by(username: "root")
group = Groups::CreateService.new(user, {
name: "Transfer Target",
path: "transfer-target",
organization_id: Organizations::Organization.default_organization.id
}).execute[:group]
project = Projects::CreateService.new(user, {
name: "Transfer Test",
path: "transfer-test",
namespace_id: user.namespace.id,
organization_id: Organizations::Organization.default_organization.id
}).execute
# 3. Schedule async transfer
service = Projects::TransferService.new(project, user)
result = service.schedule_async_transfer(group)
result # => true
project.project_namespace.reload.state # => "transfer_scheduled"
service.error # => nil
# 4. Verify worker completed the transfer (wait ~10 seconds)
sleep 10
project.reload
project.full_path # => "transfer-target/transfer-test"
project.namespace.full_path # => "transfer-target"
project.project_namespace.state # => "ancestor_inherited"
# 5. Test failure path
project.project_namespace.update_column(:state, Namespace.states[:creation_in_progress])
service = Projects::TransferService.new(project, user)
result = service.schedule_async_transfer(group)
result # => false
service.error # => "Unable to initiate transfer. The project may already have a transfer in progress."
# Reset state
project.project_namespace.update_column(:state, Namespace.states[:ancestor_inherited])
# 6. Clean up
Project.find_by(path: "transfer-test")&.destroy!
Group.find_by(path: "transfer-target")&.destroy!
Feature.disable(:groups_and_projects_async_transfer)MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Edited by Shubham Kumar