diff options
Diffstat (limited to 'app/services/projects/create_service.rb')
-rw-r--r-- | app/services/projects/create_service.rb | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 429ae905e3d..3233d1799b8 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -108,8 +108,22 @@ module Projects # users in the background def setup_authorizations if @project.group - @project.group.refresh_members_authorized_projects(blocking: false) current_user.refresh_authorized_projects + + if Feature.enabled?(:specialized_project_authorization_workers) + AuthorizedProjectUpdate::ProjectCreateWorker.perform_async(@project.id) + # AuthorizedProjectsWorker uses an exclusive lease per user but + # specialized workers might have synchronization issues. Until we + # compare the inconsistency rates of both approaches, we still run + # AuthorizedProjectsWorker but with some delay and lower urgency as a + # safety net. + @project.group.refresh_members_authorized_projects( + blocking: false, + priority: UserProjectAccessChangedService::LOW_PRIORITY + ) + else + @project.group.refresh_members_authorized_projects(blocking: false) + end else @project.add_maintainer(@project.namespace.owner, current_user: current_user) end @@ -202,8 +216,19 @@ module Projects end end + def extra_attributes_for_measurement + { + current_user: current_user&.name, + project_full_path: "#{project_namespace&.full_path}/#{@params[:path]}" + } + end + private + def project_namespace + @project_namespace ||= Namespace.find_by_id(@params[:namespace_id]) || current_user.namespace + end + def create_from_template? @params[:template_name].present? || @params[:template_project_id].present? end @@ -224,4 +249,9 @@ module Projects end end +# rubocop: disable Cop/InjectEnterpriseEditionModule Projects::CreateService.prepend_if_ee('EE::Projects::CreateService') +# rubocop: enable Cop/InjectEnterpriseEditionModule + +# Measurable should be at the bottom of the ancestor chain, so it will measure execution of EE::Projects::CreateService as well +Projects::CreateService.prepend(Measurable) |