Add worker to capture suggested reviewers accepted
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 themerge_request_id
andreviewer_ids
-
backend Once enqueued, the background job will invoke
CaptureSuggestedReviewersAcceptedServive
to record thereviewer_ids
on the existingmerge_request_predictions
table.
- change in this MR is highlighted in
#f97f71
Screenshots or screen recordings
How to set up and validate locally
- Ensure a SaaS (Gitlab.com) environment
- One way of doing this is to add a
env.runit
file to the root GDK folder with the following snippetexport GITLAB_SIMULATE_SAAS=1
- One way of doing this is to add a
- 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
- Set the feature flag on rails console
bundle exec rails c
project = Project.find(2) Feature.enable(:suggested_reviewers_control, project)
- Enable
suggested_reviewers_enabled
project settingsproject.project_setting.update!(suggested_reviewers_enabled: true)
- Create a merge request on the project
- Use some existing project members
suggested_reviewers = ["lea_mclaughlin", "ken"]
- Add some suggestions to an existing open MR
mr = MergeRequest.find(7) mr.build_predictions mr.predictions.update!(suggested_reviewers: { reviewers: suggested_reviewers })
- Navigate to the MR view page and confirm that we can see the suggested reviewers
- Click on one of the suggested reviewers, e.g
lea_mclaughlin
- 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}
- 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.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Tan Le