From 99eefcb54d0f467a96629ef63caaf3cceda18eb6 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 29 Aug 2013 19:12:22 +0300 Subject: [PATCH] Invalidate events cache when project was moved --- app/models/project.rb | 16 ++++++++++++++++ app/services/project_transfer_service.rb | 3 +++ 2 files changed, 19 insertions(+), 0 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index b505ffb..6c4f307 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -423,6 +423,7 @@ class Project < ActiveRecord::Base gitlab_shell.rm_satellites(old_path_with_namespace) ensure_satellite_exists send_move_instructions + reset_events_cache rescue # Returning false does not rollback after_* transaction but gives # us information about failing some of tasks @@ -434,4 +435,19 @@ class Project < ActiveRecord::Base raise Exception.new('repository cannot be renamed') end end + + # Reset events cache related to this project + # + # Since we do cache @event we need to reset cache in special cases: + # * when project was moved + # * when project was renamed + # 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(project_id: self.id). + order('id DESC').limit(100). + update_all(updated_at: Time.now) + end end diff --git a/app/services/project_transfer_service.rb b/app/services/project_transfer_service.rb index 8fbf92f..7150c1c 100644 --- a/app/services/project_transfer_service.rb +++ b/app/services/project_transfer_service.rb @@ -32,6 +32,9 @@ class ProjectTransferService # create satellite repo project.ensure_satellite_exists + # clear project cached events + project.reset_events_cache + true end end -- libgit2 0.21.2