Ensure mergeability check runs on specific cases
We call `MergeRequest#check_mergeability` on MR page load to trigger mergeability check. Other than that, we rely on calls for `MergeRequest#mergeable?` to eventually call it as well. This can cause stale `MergeRequest#merge_status` when: 1. Race condition occurred between the MR page load and the time `NewMergeRequestWorker` runs. 2. The `MergeRequest#merge_status` gets updated after the MR page has already loaded (e.g. new changes were pushed to the MR's target branch). As a fix, we are calling `MergeRequest#check_mergeability` in more places to ensure we check for it: 1. We now call it on `MergeRequests::AfterCreateService` to prevent race condition issue. This service is called by the `NewMergeRequestWorker`. This way, we ensure that we check for MR's mergeability after it was created. 2. `MergeRequestPollCachedWidgetEntity#merge_status` has been updated so whenever the `MergeRequest#merge_status` gets updated and the MR widget polls for updated status, we will recheck for mergeability as well. On next poll, it should show the updated `merge_status`. 3. The `check_mergeability_async_in_widget` FF has also been removed since it doesn't seem to be used at all. We also need to keep the call for `MergeRequest#check_mergeability` on the show action so we won't need to wait for poll in case the merge status gets updated and the user decides to refresh the page. Changelog: fixed
Showing
Please register or sign in to comment