diff options
author | Stan Hu <stanhu@gmail.com> | 2018-03-15 16:46:39 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-03-15 16:46:39 +0000 |
commit | 49d5c09758fe9cf6d7ab196be4bdb0f1f4b6b275 (patch) | |
tree | cc0cd6539bfe5010db877ea12da1e64426999da4 /app | |
parent | b53c42774c5060fb0ba36b0a728b16434336030d (diff) | |
parent | db908826656b78e099ab5e1d99d4524ad0751d13 (diff) | |
download | gitlab-ce-49d5c09758fe9cf6d7ab196be4bdb0f1f4b6b275.tar.gz |
Merge branch '44191-reduce-redis-usage-from-merge-request-diffs-caching' into 'master'
Resolve "Reduce Redis usage from merge request diffs caching"
Closes #44191
See merge request gitlab-org/gitlab-ce!17746
Diffstat (limited to 'app')
-rw-r--r-- | app/models/merge_request.rb | 5 | ||||
-rw-r--r-- | app/services/merge_requests/merge_request_diff_cache_service.rb | 11 |
2 files changed, 13 insertions, 3 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index c2bae379a94..149ef7ec429 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -579,9 +579,10 @@ class MergeRequest < ActiveRecord::Base return unless open? old_diff_refs = self.diff_refs + new_diff = create_merge_request_diff + + MergeRequests::MergeRequestDiffCacheService.new.execute(self, new_diff) - create_merge_request_diff - MergeRequests::MergeRequestDiffCacheService.new.execute(self) new_diff_refs = self.diff_refs update_diff_discussion_positions( diff --git a/app/services/merge_requests/merge_request_diff_cache_service.rb b/app/services/merge_requests/merge_request_diff_cache_service.rb index 2945a7fd4e4..10aa9ae609c 100644 --- a/app/services/merge_requests/merge_request_diff_cache_service.rb +++ b/app/services/merge_requests/merge_request_diff_cache_service.rb @@ -1,8 +1,17 @@ module MergeRequests class MergeRequestDiffCacheService - def execute(merge_request) + def execute(merge_request, new_diff) # Executing the iteration we cache all the highlighted diff information merge_request.diffs.diff_files.to_a + + # Remove cache for all diffs on this MR. Do not use the association on the + # model, as that will interfere with other actions happening when + # reloading the diff. + MergeRequestDiff.where(merge_request: merge_request).each do |merge_request_diff| + next if merge_request_diff == new_diff + + merge_request_diff.diffs.clear_cache! + end end end end |