Skip to content

Add worker to capture suggested reviewers accepted

Tan Le requested to merge async-capture-suggested-reviewes-accepted into master

What does this MR do and why?

This MR is an optimization on top of !103152 (merged). To reduce latency when users assign reviewers on the UI, we would like to perform the capture in a background job.

The front-end facing feature is behind a feature flag suggested_reviewers_control

Implementation

  • backend Invoke the CaptureSuggestedReviewersAcceptedWorker passing the merge_request_id and reviewer_ids
  • backend Once enqueued, the background job will invoke CaptureSuggestedReviewersAcceptedServive to record the reviewer_ids on the existing merge_request_predictions table.
  • change in this MR is highlighted in #f97f71

Screenshots or screen recordings

Screen_Shot_2022-11-16_at_22.15.38

How to set up and validate locally

  1. Ensure a SaaS (Gitlab.com) environment
    1. One way of doing this is to add a env.runit file to the root GDK folder with the following snippet
      export GITLAB_SIMULATE_SAAS=1
  2. Set ultimate license on a group http://gdk.test:3000/admin/groups
  3. Create a project in the ultimate group or use an existing one, e.g. http://gdk.test:3000/gitlab-org/gitlab-test
  4. Set the feature flag on rails console bundle exec rails c
    project = Project.find(2)
    Feature.enable(:suggested_reviewers_control, project)
  5. Enable suggested_reviewers_enabled project settings
    project.project_setting.update!(suggested_reviewers_enabled: true)
  6. Create a merge request on the project
  7. Use some existing project members
    suggested_reviewers = ["lea_mclaughlin", "ken"]
  8. Add some suggestions to an existing open MR
    mr = MergeRequest.find(7)
    mr.build_predictions
    mr.predictions.update!(suggested_reviewers: { reviewers: suggested_reviewers })
  9. Navigate to the MR view page and confirm that we can see the suggested reviewers
  10. Click on one of the suggested reviewers, e.g lea_mclaughlin
  11. Confirm that a background job has been kicked off
    $ gdk tail rails-background-jobs | grep --line-buffered CaptureSuggestedReviewersAcceptedWorker
    2022-11-17_05:03:20.29134 rails-background-jobs : {"severity":"INFO","time":"2022-11-17T05:03:20.291Z","retry":3,"queue":"default","backtrace":true,"version":0,"args":["7","[FILTERED]"],"class":"MergeRequests::CaptureSuggestedReviewersAcceptedWorker","jid":"0c362e504452e476ae3cc137","created_at":"2022-11-17T05:03:20.288Z","correlation_id":"01GJ1ZGKZ0GBJ3RS9ME75V3QP1","meta.caller_id":"Projects::MergeRequestsController#update","meta.remote_ip":"172.16.123.1","meta.feature_category":"workflow_automation","meta.user":"root","meta.user_id":1,"meta.project":"gitlab-org/gitlab-test","meta.root_namespace":"gitlab-org","meta.client_id":"user/1","meta.root_caller_id":"Projects::MergeRequestsController#update","worker_data_consistency":"always","idempotency_key":"resque:gitlab:duplicate:default:eb600d01eeedf0d060c39fa8a4ba603451937cba4aec927c72b08b012765b8cc","size_limiter":"validated","enqueued_at":"2022-11-17T05:03:20.290Z","job_size_bytes":7,"pid":91868,"message":"MergeRequests::CaptureSuggestedReviewersAcceptedWorker JID-0c362e504452e476ae3cc137: start","job_status":"start","scheduling_latency_s":0.000452}
    2022-11-17_05:03:21.01425 rails-background-jobs : {"severity":"INFO","time":"2022-11-17T05:03:21.014Z","retry":3,"queue":"default","backtrace":true,"version":0,"args":["7","[FILTERED]"],"class":"MergeRequests::CaptureSuggestedReviewersAcceptedWorker","jid":"0c362e504452e476ae3cc137","created_at":"2022-11-17T05:03:20.288Z","correlation_id":"01GJ1ZGKZ0GBJ3RS9ME75V3QP1","meta.caller_id":"Projects::MergeRequestsController#update","meta.remote_ip":"172.16.123.1","meta.feature_category":"workflow_automation","meta.user":"root","meta.user_id":1,"meta.project":"gitlab-org/gitlab-test","meta.root_namespace":"gitlab-org","meta.client_id":"user/1","meta.root_caller_id":"Projects::MergeRequestsController#update","worker_data_consistency":"always","idempotency_key":"resque:gitlab:duplicate:default:eb600d01eeedf0d060c39fa8a4ba603451937cba4aec927c72b08b012765b8cc","size_limiter":"validated","enqueued_at":"2022-11-17T05:03:20.290Z","job_size_bytes":7,"pid":91868,"message":"MergeRequests::CaptureSuggestedReviewersAcceptedWorker JID-0c362e504452e476ae3cc137: done: 0.722963 sec","job_status":"done","scheduling_latency_s":0.000452,"redis_calls":2,"redis_duration_s":0.000239,"redis_read_bytes":2,"redis_write_bytes":186,"redis_queues_calls":2,"redis_queues_duration_s":0.000239,"redis_queues_read_bytes":2,"redis_queues_write_bytes":186,"db_count":9,"db_write_count":3,"db_cached_count":0,"db_replica_count":0,"db_primary_count":9,"db_main_count":9,"db_main_replica_count":0,"db_replica_cached_count":0,"db_primary_cached_count":0,"db_main_cached_count":0,"db_main_replica_cached_count":0,"db_replica_wal_count":0,"db_primary_wal_count":0,"db_main_wal_count":0,"db_main_replica_wal_count":0,"db_replica_wal_cached_count":0,"db_primary_wal_cached_count":0,"db_main_wal_cached_count":0,"db_main_replica_wal_cached_count":0,"db_replica_duration_s":0.0,"db_primary_duration_s":0.01,"db_main_duration_s":0.01,"db_main_replica_duration_s":0.0,"cpu_s":0.108497,"worker_id":"sidekiq_0","rate_limiting_gates":[],"extra.merge_requests_capture_suggested_reviewers_accepted_worker.project_id":1,"extra.merge_requests_capture_suggested_reviewers_accepted_worker.merge_request_id":7,"extra.merge_requests_capture_suggested_reviewers_accepted_worker.reviewers":["lea_mclaughlin"],"duration_s":0.722963,"completed_at":"2022-11-17T05:03:21.014Z","load_balancing_strategy":"primary","db_duration_s":0.010622}
  12. Confirm that the reviewers are recorded in the database
    mr.predictions.accepted_reviewers
    => {"reviewers"=>["lea_mclaughlin"]}

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Relates to https://gitlab.com/gitlab-org/modelops/applied-ml/review-recommender/recommender-bot-service/-/issues/65

Edited by Tan Le

Merge request reports

Loading