From bffe0d6325710e89e405390f4da297fb12fdc314 Mon Sep 17 00:00:00 2001 From: Josh Frye Date: Tue, 31 May 2016 08:58:11 -0400 Subject: Cache assigned merge request count. Closes #18036 --- app/models/user.rb | 6 ++++++ app/views/layouts/nav/_dashboard.html.haml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/models/user.rb b/app/models/user.rb index 15b6cbc2255..8dde01bf355 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -776,6 +776,12 @@ class User < ActiveRecord::Base notification_settings.find_or_initialize_by(source: source) end + def assigned_open_merge_request_count + Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], expires_in: 60) do + assigned_merge_requests.opened.count + end + end + private def projects_union diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml index 43532b0c155..e14ae850fcc 100644 --- a/app/views/layouts/nav/_dashboard.html.haml +++ b/app/views/layouts/nav/_dashboard.html.haml @@ -36,7 +36,7 @@ = icon('tasks fw') %span Merge Requests - %span.count= number_with_delimiter(current_user.assigned_merge_requests.opened.count) + %span.count= number_with_delimiter(current_user.assigned_open_merge_request_count) = nav_link(controller: :snippets) do = link_to dashboard_snippets_path, title: 'Snippets' do = icon('clipboard fw') -- cgit v1.2.3 From bfccea370310d6f7e5fe16c846ccd073d487a97f Mon Sep 17 00:00:00 2001 From: Josh Frye Date: Tue, 31 May 2016 09:02:47 -0400 Subject: Cache assigned open issue count. Closes #18035 --- app/models/user.rb | 10 ++++++++-- app/views/layouts/nav/_dashboard.html.haml | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/models/user.rb b/app/models/user.rb index 8dde01bf355..55f8e149629 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -778,8 +778,14 @@ class User < ActiveRecord::Base def assigned_open_merge_request_count Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], expires_in: 60) do - assigned_merge_requests.opened.count - end + assigned_merge_requests.opened.count + end + end + + def assigned_open_issues_count + Rails.cache.fetch(['users', id, 'assigned_open_issues_count'], expires_in: 60) do + assigned_issues.opened.count + end end private diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml index e14ae850fcc..306ebd5fcf7 100644 --- a/app/views/layouts/nav/_dashboard.html.haml +++ b/app/views/layouts/nav/_dashboard.html.haml @@ -30,7 +30,7 @@ = icon('exclamation-circle fw') %span Issues - %span.count= number_with_delimiter(current_user.assigned_issues.opened.count) + %span.count= number_with_delimiter(current_user.assigned_open_issues_count) = nav_link(path: 'dashboard#merge_requests') do = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'dashboard-shortcuts-merge_requests' do = icon('tasks fw') -- cgit v1.2.3 From 8835b7889a6265aba3c6d7ee241abf80a1cf07f3 Mon Sep 17 00:00:00 2001 From: Josh Frye Date: Wed, 1 Jun 2016 19:27:21 -0400 Subject: Flush cache in callback. Add tests --- app/models/concerns/issuable.rb | 8 ++++++++ app/models/user.rb | 13 +++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 2326a395cb8..46cde460952 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -68,6 +68,14 @@ module Issuable strip_attributes :title acts_as_paranoid + + after_save :update_assignee_cache_counts, if: :assignee_id_changed? + + def update_assignee_cache_counts + # make sure we flush the cache for both the old *and* new assignee + User.find(assignee_id_was).update_cache_counts if assignee_id_was + assignee.update_cache_counts if assignee_id + end end module ClassMethods diff --git a/app/models/user.rb b/app/models/user.rb index 55f8e149629..172845c9d25 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -776,18 +776,23 @@ class User < ActiveRecord::Base notification_settings.find_or_initialize_by(source: source) end - def assigned_open_merge_request_count - Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], expires_in: 60) do + def assigned_open_merge_request_count(force: false) + Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], force: force) do assigned_merge_requests.opened.count end end - def assigned_open_issues_count - Rails.cache.fetch(['users', id, 'assigned_open_issues_count'], expires_in: 60) do + def assigned_open_issues_count(force: false) + Rails.cache.fetch(['users', id, 'assigned_open_issues_count'], force: force) do assigned_issues.opened.count end end + def update_cache_counts + assigned_open_merge_request_count(force: true) + assigned_open_issues_count(force: true) + end + private def projects_union -- cgit v1.2.3 From 0f3df62e1a42982ffb635dc5a9b201ed2520b0f4 Mon Sep 17 00:00:00 2001 From: Josh Frye Date: Thu, 2 Jun 2016 09:25:40 -0400 Subject: Update specs. Add CHANGELOG entry --- app/models/concerns/issuable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 46cde460952..50f5b749e38 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -74,7 +74,7 @@ module Issuable def update_assignee_cache_counts # make sure we flush the cache for both the old *and* new assignee User.find(assignee_id_was).update_cache_counts if assignee_id_was - assignee.update_cache_counts if assignee_id + assignee.update_cache_counts if assignee end end -- cgit v1.2.3