Skip to content

Handle token creation and project already-registered failure in project registration

Tan Le requested to merge 377917-handle-token-generation-failure into master

What does this MR do and why?

This MR fixes:

  • NoMethodError exception in the Projects::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

  1. Set ultimate license on a group http://gdk.test:3000/admin/groups
  2. Create a project in the ultimate group or use an existing one, e.g. http://gdk.test:3000/gitlab-org/gitlab-test
  3. Start rails console bundle exec rails c
  4. Enable SAAS simulation
    ENV['GITLAB_SIMULATE_SAAS'] = '1'
  5. Set the feature flag
    project = Project.find(2)
    Feature.enable(:suggested_reviewers_control, project)
  6. 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
  7. 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.

Edited by Tan Le

Merge request reports

Loading