Commit 63723ef6df788391ed776441421ae482ad4fbd82
1 parent
ee53b739
Exists in
master
and in
4 other branches
Fix dashboard event caching
Showing
6 changed files
with
47 additions
and
0 deletions
Show diff stats
app/controllers/projects/issues_controller.rb
... | ... | @@ -74,6 +74,7 @@ class Projects::IssuesController < Projects::ApplicationController |
74 | 74 | |
75 | 75 | def update |
76 | 76 | @issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id)) |
77 | + @issue.reset_events_cache | |
77 | 78 | |
78 | 79 | respond_to do |format| |
79 | 80 | format.js | ... | ... |
app/controllers/projects/merge_requests_controller.rb
... | ... | @@ -97,6 +97,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
97 | 97 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
98 | 98 | @merge_request.reload_code |
99 | 99 | @merge_request.mark_as_unchecked |
100 | + @merge_request.reset_events_cache | |
100 | 101 | redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' |
101 | 102 | else |
102 | 103 | render "edit" | ... | ... |
app/controllers/projects/notes_controller.rb
... | ... | @@ -39,6 +39,7 @@ class Projects::NotesController < Projects::ApplicationController |
39 | 39 | @note = @project.notes.find(params[:id]) |
40 | 40 | return access_denied! unless can?(current_user, :admin_note, @note) |
41 | 41 | @note.destroy |
42 | + @note.reset_events_cache | |
42 | 43 | |
43 | 44 | respond_to do |format| |
44 | 45 | format.js { render nothing: true } |
... | ... | @@ -50,6 +51,7 @@ class Projects::NotesController < Projects::ApplicationController |
50 | 51 | return access_denied! unless can?(current_user, :admin_note, @note) |
51 | 52 | |
52 | 53 | @note.update_attributes(params[:note]) |
54 | + @note.reset_events_cache | |
53 | 55 | |
54 | 56 | respond_to do |format| |
55 | 57 | format.js do | ... | ... |
app/models/issue.rb
... | ... | @@ -64,4 +64,18 @@ class Issue < ActiveRecord::Base |
64 | 64 | def gfm_reference |
65 | 65 | "issue ##{iid}" |
66 | 66 | end |
67 | + | |
68 | + # Reset issue events cache | |
69 | + # | |
70 | + # Since we do cache @event we need to reset cache in special cases: | |
71 | + # * when an issue is updated | |
72 | + # Events cache stored like events/23-20130109142513. | |
73 | + # The cache key includes updated_at timestamp. | |
74 | + # Thus it will automatically generate a new fragment | |
75 | + # when the event is updated because the key changes. | |
76 | + def reset_events_cache | |
77 | + Event.where(target_id: self.id, target_type: 'Issue'). | |
78 | + order('id DESC').limit(100). | |
79 | + update_all(updated_at: Time.now) | |
80 | + end | |
67 | 81 | end | ... | ... |
app/models/merge_request.rb
... | ... | @@ -305,6 +305,20 @@ class MergeRequest < ActiveRecord::Base |
305 | 305 | self.target_project.repository.branch_names.include?(self.target_branch) |
306 | 306 | end |
307 | 307 | |
308 | + # Reset merge request events cache | |
309 | + # | |
310 | + # Since we do cache @event we need to reset cache in special cases: | |
311 | + # * when a merge request is updated | |
312 | + # Events cache stored like events/23-20130109142513. | |
313 | + # The cache key includes updated_at timestamp. | |
314 | + # Thus it will automatically generate a new fragment | |
315 | + # when the event is updated because the key changes. | |
316 | + def reset_events_cache | |
317 | + Event.where(target_id: self.id, target_type: 'MergeRequest'). | |
318 | + order('id DESC').limit(100). | |
319 | + update_all(updated_at: Time.now) | |
320 | + end | |
321 | + | |
308 | 322 | private |
309 | 323 | |
310 | 324 | def dump_commits(commits) | ... | ... |
app/models/note.rb
... | ... | @@ -239,4 +239,19 @@ class Note < ActiveRecord::Base |
239 | 239 | def noteable_type=(sType) |
240 | 240 | super(sType.to_s.classify.constantize.base_class.to_s) |
241 | 241 | end |
242 | + | |
243 | + # Reset notes events cache | |
244 | + # | |
245 | + # Since we do cache @event we need to reset cache in special cases: | |
246 | + # * when a note is updated | |
247 | + # * when a note is removed | |
248 | + # Events cache stored like events/23-20130109142513. | |
249 | + # The cache key includes updated_at timestamp. | |
250 | + # Thus it will automatically generate a new fragment | |
251 | + # when the event is updated because the key changes. | |
252 | + def reset_events_cache | |
253 | + Event.where(target_id: self.id, target_type: 'Note'). | |
254 | + order('id DESC').limit(100). | |
255 | + update_all(updated_at: Time.now) | |
256 | + end | |
242 | 257 | end | ... | ... |