Commit 63723ef6df788391ed776441421ae482ad4fbd82

Authored by Drew Blessing
1 parent ee53b739

Fix dashboard event caching

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