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,6 +74,7 @@ class Projects::IssuesController < Projects::ApplicationController | ||
74 | 74 | ||
75 | def update | 75 | def update |
76 | @issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id)) | 76 | @issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id)) |
77 | + @issue.reset_events_cache | ||
77 | 78 | ||
78 | respond_to do |format| | 79 | respond_to do |format| |
79 | format.js | 80 | format.js |
app/controllers/projects/merge_requests_controller.rb
@@ -97,6 +97,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | @@ -97,6 +97,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
97 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) | 97 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
98 | @merge_request.reload_code | 98 | @merge_request.reload_code |
99 | @merge_request.mark_as_unchecked | 99 | @merge_request.mark_as_unchecked |
100 | + @merge_request.reset_events_cache | ||
100 | redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' | 101 | redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' |
101 | else | 102 | else |
102 | render "edit" | 103 | render "edit" |
app/controllers/projects/notes_controller.rb
@@ -39,6 +39,7 @@ class Projects::NotesController < Projects::ApplicationController | @@ -39,6 +39,7 @@ class Projects::NotesController < Projects::ApplicationController | ||
39 | @note = @project.notes.find(params[:id]) | 39 | @note = @project.notes.find(params[:id]) |
40 | return access_denied! unless can?(current_user, :admin_note, @note) | 40 | return access_denied! unless can?(current_user, :admin_note, @note) |
41 | @note.destroy | 41 | @note.destroy |
42 | + @note.reset_events_cache | ||
42 | 43 | ||
43 | respond_to do |format| | 44 | respond_to do |format| |
44 | format.js { render nothing: true } | 45 | format.js { render nothing: true } |
@@ -50,6 +51,7 @@ class Projects::NotesController < Projects::ApplicationController | @@ -50,6 +51,7 @@ class Projects::NotesController < Projects::ApplicationController | ||
50 | return access_denied! unless can?(current_user, :admin_note, @note) | 51 | return access_denied! unless can?(current_user, :admin_note, @note) |
51 | 52 | ||
52 | @note.update_attributes(params[:note]) | 53 | @note.update_attributes(params[:note]) |
54 | + @note.reset_events_cache | ||
53 | 55 | ||
54 | respond_to do |format| | 56 | respond_to do |format| |
55 | format.js do | 57 | format.js do |
app/models/issue.rb
@@ -64,4 +64,18 @@ class Issue < ActiveRecord::Base | @@ -64,4 +64,18 @@ class Issue < ActiveRecord::Base | ||
64 | def gfm_reference | 64 | def gfm_reference |
65 | "issue ##{iid}" | 65 | "issue ##{iid}" |
66 | end | 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 | end | 81 | end |
app/models/merge_request.rb
@@ -305,6 +305,20 @@ class MergeRequest < ActiveRecord::Base | @@ -305,6 +305,20 @@ class MergeRequest < ActiveRecord::Base | ||
305 | self.target_project.repository.branch_names.include?(self.target_branch) | 305 | self.target_project.repository.branch_names.include?(self.target_branch) |
306 | end | 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 | private | 322 | private |
309 | 323 | ||
310 | def dump_commits(commits) | 324 | def dump_commits(commits) |
app/models/note.rb
@@ -239,4 +239,19 @@ class Note < ActiveRecord::Base | @@ -239,4 +239,19 @@ class Note < ActiveRecord::Base | ||
239 | def noteable_type=(sType) | 239 | def noteable_type=(sType) |
240 | super(sType.to_s.classify.constantize.base_class.to_s) | 240 | super(sType.to_s.classify.constantize.base_class.to_s) |
241 | end | 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 | end | 257 | end |