summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2018-06-22 14:17:03 -0300
committerFelipe Artur <felipefac@gmail.com>2018-06-25 11:54:11 -0300
commit625957c2ad70e5af03c988744ff3d4112d84e998 (patch)
tree1c3a6928552954ada8a2554c20aa35f3fd1ac45f
parent4ab1011d427687b44ed937684c1a5a364d156a70 (diff)
downloadgitlab-ce-issue_47729.tar.gz
BatchOpenIssuesCount only updates public issues countissue_47729
-rw-r--r--app/services/projects/batch_open_issues_count_service.rb7
-rw-r--r--app/services/projects/open_issues_count_service.rb22
-rw-r--r--spec/services/projects/batch_open_issues_count_service_spec.rb6
3 files changed, 19 insertions, 16 deletions
diff --git a/app/services/projects/batch_open_issues_count_service.rb b/app/services/projects/batch_open_issues_count_service.rb
index 1e00da04197..3b0ade2419b 100644
--- a/app/services/projects/batch_open_issues_count_service.rb
+++ b/app/services/projects/batch_open_issues_count_service.rb
@@ -3,11 +3,10 @@
# because the service use maps to retrieve the project ids
module Projects
class BatchOpenIssuesCountService < Projects::BatchCountService
-
- # Method not needed. Cache here is updated using
- # overloaded OpenIssuesCount#refresh_cache method
def global_count
- nil
+ @global_count ||= begin
+ count_service.query(project_ids).group(:project_id).count
+ end
end
def count_service
diff --git a/app/services/projects/open_issues_count_service.rb b/app/services/projects/open_issues_count_service.rb
index e70ee86f644..78b1477186a 100644
--- a/app/services/projects/open_issues_count_service.rb
+++ b/app/services/projects/open_issues_count_service.rb
@@ -40,19 +40,21 @@ module Projects
cache_key(TOTAL_COUNT_KEY)
end
- # The block passed as parameter is ignored because we need to refresh both
- # cache keys on every case.
def refresh_cache(&block)
- count_grouped_by_confidential = self.class.query(@project, public_only: false).group(:confidential).count
- public_count = count_grouped_by_confidential[false] || 0
- total_count = public_count + (count_grouped_by_confidential[true] || 0)
+ if block_given?
+ super(&block)
+ else
+ count_grouped_by_confidential = self.class.query(@project, public_only: false).group(:confidential).count
+ public_count = count_grouped_by_confidential[false] || 0
+ total_count = public_count + (count_grouped_by_confidential[true] || 0)
- update_cache_for_key(public_count_cache_key) do
- public_count
- end
+ update_cache_for_key(public_count_cache_key) do
+ public_count
+ end
- update_cache_for_key(total_count_cache_key) do
- total_count
+ update_cache_for_key(total_count_cache_key) do
+ total_count
+ end
end
end
diff --git a/spec/services/projects/batch_open_issues_count_service_spec.rb b/spec/services/projects/batch_open_issues_count_service_spec.rb
index 720d7036396..599aaf62080 100644
--- a/spec/services/projects/batch_open_issues_count_service_spec.rb
+++ b/spec/services/projects/batch_open_issues_count_service_spec.rb
@@ -19,8 +19,10 @@ describe Projects::BatchOpenIssuesCountService do
it 'refreshes cache keys correctly' do
subject.refresh_cache
- expect(Rails.cache.read(get_cache_key(subject, project_1))).to eq(2)
- expect(Rails.cache.read(get_cache_key(subject, project_2))).to eq(2)
+ # It does not update total issues cache
+ expect(Rails.cache.read(get_cache_key(subject, project_1))).to eq(nil)
+ expect(Rails.cache.read(get_cache_key(subject, project_2))).to eq(nil)
+
expect(Rails.cache.read(get_cache_key(subject, project_1, true))).to eq(1)
expect(Rails.cache.read(get_cache_key(subject, project_1, true))).to eq(1)
end