Editing merge request results in 404 if approval rules are changed
<!--IssueSummary start--> <details> <summary> Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards. </summary> - [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=520603) </details> <!--IssueSummary end--> <!--- Please read this! Before opening a new issue, make sure to search for keywords in the issues filtered by the "regression" or "type::bug" label: - https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=regression - https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=type::bug and verify the issue you're about to submit isn't a duplicate. ---> ### Summary In cases where the same MR is edited, and the approval rules are removed, the "Save Changes" button will result in a 404. <!-- Summarize the bug encountered concisely. --> ### Steps to reproduce - Create merge request - Set up approval rules - Edit merge request - From a different tab, remove the approval rules or update them - Submit previous changes A 404 will be returned and an exception will be logged saying: "Couldn't find ApprovalMergeRequestRule with ID=<id> for MergeRequest with ID=<id>" ### Example Project N/A, can be reproduced in .com ### What is the current *bug* behavior? 404 <!-- Describe what actually happens. --> ### What is the expected *correct* behavior? If changes happen to an MR that's being edited, these should result in a notification prompting the user to refresh the MR <!-- Describe what you should see instead. --> ### Relevant logs and/or screenshots Backtrace from .com (Correlation ID 01JMJTBBKJSWCA38ZMJTE5WHPS): ``` [app/services/issuable_base_service.rb:294:in `update', app/services/merge_requests/base_service.rb:155:in `update', app/services/merge_requests/update_service.rb:134:in `general_fallback', ee/app/services/ee/merge_requests/update_service.rb:27:in `general_fallback', app/services/merge_requests/update_service.rb:23:in `execute', app/controllers/projects/merge_requests_controller.rb:247:in `update', lib/gitlab/ip_address_state.rb:11:in `with', ee/app/controllers/ee/application_controller.rb:45:in `set_current_ip_address', app/controllers/application_controller.rb:491:in `set_current_admin', lib/gitlab/session.rb:11:in `with_session', app/controllers/application_controller.rb:482:in `set_session_storage', lib/gitlab/i18n.rb:114:in `with_locale', lib/gitlab/i18n.rb:120:in `with_user_locale', app/controllers/application_controller.rb:473:in `set_locale', app/controllers/application_controller.rb:466:in `set_current_context', lib/gitlab/middleware/action_controller_static_context.rb:23:in `call', ee/lib/omni_auth/strategies/group_saml.rb:41:in `other_phase', lib/gitlab/metrics/elasticsearch_rack_middleware.rb:16:in `call', lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `block in call', lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled', lib/gitlab/middleware/sidekiq_shard_awareness_validation.rb:20:in `call', lib/gitlab/middleware/memory_report.rb:13:in `call', lib/gitlab/middleware/speedscope.rb:13:in `call', lib/gitlab/database/load_balancing/rack_middleware.rb:23:in `call', lib/gitlab/middleware/rails_queue_duration.rb:33:in `call', lib/gitlab/etag_caching/middleware.rb:21:in `call', lib/gitlab/metrics/rack_middleware.rb:16:in `block in call', lib/gitlab/metrics/web_transaction.rb:46:in `run', lib/gitlab/metrics/rack_middleware.rb:16:in `call', lib/gitlab/middleware/go.rb:21:in `call', lib/gitlab/middleware/query_analyzer.rb:11:in `block in call', lib/gitlab/database/query_analyzer.rb:83:in `within', lib/gitlab/middleware/query_analyzer.rb:11:in `call', lib/ci/job_token/middleware.rb:11:in `call', lib/gitlab/middleware/multipart.rb:173:in `call', lib/gitlab/middleware/read_only/controller.rb:50:in `call', lib/gitlab/middleware/read_only.rb:18:in `call', lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call', lib/gitlab/middleware/same_site_cookies.rb:27:in `call', lib/gitlab/middleware/path_traversal_check.rb:40:in `call', lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call', lib/gitlab/middleware/basic_health_check.rb:25:in `call', lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call', lib/gitlab/middleware/request_context.rb:15:in `call', lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call', config/initializers/fix_local_cache_middleware.rb:11:in `call', lib/gitlab/middleware/compressed_json.rb:44:in `call', lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call', lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call', lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call', lib/gitlab/middleware/release_env.rb:12:in `call'] ``` ### Output of checks This bug happens on GitLab.com ### Possible fixes Prompt user to fetch and review MR changes <!-- If you don't have /label privileges, follow up with an issue comment of `@gitlab-bot label ~"type::bug"` -->
issue