Fix dashboard event caching
This commit is contained in:
parent
ee53b73986
commit
63723ef6df
6 changed files with 47 additions and 0 deletions
|
@ -74,6 +74,7 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id))
|
@issue.update_attributes(params[:issue].merge(author_id_of_changes: current_user.id))
|
||||||
|
@issue.reset_events_cache
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js
|
format.js
|
||||||
|
|
|
@ -97,6 +97,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id))
|
if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id))
|
||||||
@merge_request.reload_code
|
@merge_request.reload_code
|
||||||
@merge_request.mark_as_unchecked
|
@merge_request.mark_as_unchecked
|
||||||
|
@merge_request.reset_events_cache
|
||||||
redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.'
|
redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.'
|
||||||
else
|
else
|
||||||
render "edit"
|
render "edit"
|
||||||
|
|
|
@ -39,6 +39,7 @@ class Projects::NotesController < Projects::ApplicationController
|
||||||
@note = @project.notes.find(params[:id])
|
@note = @project.notes.find(params[:id])
|
||||||
return access_denied! unless can?(current_user, :admin_note, @note)
|
return access_denied! unless can?(current_user, :admin_note, @note)
|
||||||
@note.destroy
|
@note.destroy
|
||||||
|
@note.reset_events_cache
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js { render nothing: true }
|
format.js { render nothing: true }
|
||||||
|
@ -50,6 +51,7 @@ class Projects::NotesController < Projects::ApplicationController
|
||||||
return access_denied! unless can?(current_user, :admin_note, @note)
|
return access_denied! unless can?(current_user, :admin_note, @note)
|
||||||
|
|
||||||
@note.update_attributes(params[:note])
|
@note.update_attributes(params[:note])
|
||||||
|
@note.reset_events_cache
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js do
|
format.js do
|
||||||
|
|
|
@ -64,4 +64,18 @@ class Issue < ActiveRecord::Base
|
||||||
def gfm_reference
|
def gfm_reference
|
||||||
"issue ##{iid}"
|
"issue ##{iid}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Reset issue events cache
|
||||||
|
#
|
||||||
|
# Since we do cache @event we need to reset cache in special cases:
|
||||||
|
# * when an issue is updated
|
||||||
|
# Events cache stored like events/23-20130109142513.
|
||||||
|
# The cache key includes updated_at timestamp.
|
||||||
|
# Thus it will automatically generate a new fragment
|
||||||
|
# when the event is updated because the key changes.
|
||||||
|
def reset_events_cache
|
||||||
|
Event.where(target_id: self.id, target_type: 'Issue').
|
||||||
|
order('id DESC').limit(100).
|
||||||
|
update_all(updated_at: Time.now)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -305,6 +305,20 @@ class MergeRequest < ActiveRecord::Base
|
||||||
self.target_project.repository.branch_names.include?(self.target_branch)
|
self.target_project.repository.branch_names.include?(self.target_branch)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Reset merge request events cache
|
||||||
|
#
|
||||||
|
# Since we do cache @event we need to reset cache in special cases:
|
||||||
|
# * when a merge request is updated
|
||||||
|
# Events cache stored like events/23-20130109142513.
|
||||||
|
# The cache key includes updated_at timestamp.
|
||||||
|
# Thus it will automatically generate a new fragment
|
||||||
|
# when the event is updated because the key changes.
|
||||||
|
def reset_events_cache
|
||||||
|
Event.where(target_id: self.id, target_type: 'MergeRequest').
|
||||||
|
order('id DESC').limit(100).
|
||||||
|
update_all(updated_at: Time.now)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def dump_commits(commits)
|
def dump_commits(commits)
|
||||||
|
|
|
@ -239,4 +239,19 @@ class Note < ActiveRecord::Base
|
||||||
def noteable_type=(sType)
|
def noteable_type=(sType)
|
||||||
super(sType.to_s.classify.constantize.base_class.to_s)
|
super(sType.to_s.classify.constantize.base_class.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Reset notes events cache
|
||||||
|
#
|
||||||
|
# Since we do cache @event we need to reset cache in special cases:
|
||||||
|
# * when a note is updated
|
||||||
|
# * when a note is removed
|
||||||
|
# Events cache stored like events/23-20130109142513.
|
||||||
|
# The cache key includes updated_at timestamp.
|
||||||
|
# Thus it will automatically generate a new fragment
|
||||||
|
# when the event is updated because the key changes.
|
||||||
|
def reset_events_cache
|
||||||
|
Event.where(target_id: self.id, target_type: 'Note').
|
||||||
|
order('id DESC').limit(100).
|
||||||
|
update_all(updated_at: Time.now)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue