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 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
... ...