Handle token creation and project already-registered failure in project registration
What does this MR do and why?
This MR fixes:
-
NoMethodError
exception in theProjects::RegisterSuggestedReviewersProjectWorker
(issue) - Multiple tokens are being created when trying to register an already registered project (issue)
As part of this MR, I also use the ServiceResponse
abstraction to ensure a consistent interface for both success and error cases.
Stacktrace
ee/app/services/projects/register_suggested_reviewers_project_service.rb:28:in `access_token'
ee/app/services/projects/register_suggested_reviewers_project_service.rb:12:in `execute'
ee/app/workers/projects/register_suggested_reviewers_project_worker.rb:24:in `perform'
lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:26:in `call'
lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executed.rb:17:in `perform'
lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb:58:in `perform'
lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb:8:in `call'
lib/gitlab/sidekiq_middleware/worker_context.rb:9:in `wrap_in_optional_context'
lib/gitlab/sidekiq_middleware/worker_context/server.rb:19:in `block in call'
lib/gitlab/application_context.rb:113:in `block in use'
lib/gitlab/application_context.rb:113:in `use'
lib/gitlab/application_context.rb:54:in `with_context'
lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call'
lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call'
lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call'
lib/gitlab/database/query_analyzer.rb:37:in `within'
lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call'
lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call'
lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call'
lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call'
lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:10:in `block in call'
lib/gitlab/with_request_store.rb:17:in `enabling_request_store'
lib/gitlab/with_request_store.rb:10:in `with_request_store'
lib/gitlab/sidekiq_middleware/request_store_middleware.rb:9:in `call'
lib/gitlab/sidekiq_middleware/server_metrics.rb:76:in `block in call'
lib/gitlab/sidekiq_middleware/server_metrics.rb:103:in `block in instrument'
lib/gitlab/metrics/background_transaction.rb:33:in `run'
lib/gitlab/sidekiq_middleware/server_metrics.rb:103:in `instrument'
lib/gitlab/sidekiq_middleware/server_metrics.rb:75:in `call'
lib/gitlab/sidekiq_middleware/monitor.rb:10:in `block in call'
lib/gitlab/sidekiq_daemon/monitor.rb:49:in `within_job'
lib/gitlab/sidekiq_middleware/monitor.rb:9:in `call'
lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call'
lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call'
Screenshots or screen recordings
Screenshots are required for UI changes, and strongly recommended for all other merge requests.
How to set up and validate locally
- Set ultimate license on a group
http://gdk.test:3000/admin/groups
- Create a project in the ultimate group or use an existing one, e.g.
http://gdk.test:3000/gitlab-org/gitlab-test
- Start rails console
bundle exec rails c
- Enable SAAS simulation
ENV['GITLAB_SIMULATE_SAAS'] = '1'
- Set the feature flag
project = Project.find(2) Feature.enable(:suggested_reviewers_control, project)
- Enable the suggested reviewers setting and disable to access token creation setting
project.project_setting.update(suggested_reviewers_enabled: true) project.namespace.namespace_settings.update(resource_access_token_creation_allowed: false) project.reload
- Invoke the service and observe the response object
user = User.first service = ::Projects::RegisterSuggestedReviewersProjectService.new(project: project, current_user: user) => #<ServiceResponse:0x000000013c7f8f68 @http_status=nil, @message="Unable to generate access token", @payload={}, @reason=nil, @status=:error>
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Tan Le