From dac08ec73b1fbbd199a1c04863df487dfe6b43fc Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:32:02 -0800 Subject: [PATCH 1/7] Test count_verified_repositories behavior --- .../repository_verification_finder_spec.rb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ee/spec/finders/geo/repository_verification_finder_spec.rb b/ee/spec/finders/geo/repository_verification_finder_spec.rb index 1bc6be325b99f0..2b3126b19cf4ab 100644 --- a/ee/spec/finders/geo/repository_verification_finder_spec.rb +++ b/ee/spec/finders/geo/repository_verification_finder_spec.rb @@ -252,4 +252,30 @@ describe '#find_reverifiable_wikis' do it_behaves_like 'find reverifiable projects', :wiki end + + describe '#count_verified_repositories' do + context 'when a repository is verified' do + it 'includes the repository' do + create(:repository_state, :repository_verified) + + expect(subject.count_verified_repositories).to eq(1) + end + end + + context 'when a repository failed verification' do + it 'excludes the repository' do + create(:repository_state, :repository_failed) + + expect(subject.count_verified_repositories).to eq(0) + end + end + + context 'when a repository has outdated verification' do + it 'excludes the repository' do + create(:repository_state, :repository_outdated) + + expect(subject.count_verified_repositories).to eq(0) + end + end + end end -- GitLab From fbc3f8bb6ed93196f28f835e6045d7339c2ae592 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:33:52 -0800 Subject: [PATCH 2/7] Optimize count_verified_repositories SQL --- ee/app/finders/geo/repository_verification_finder.rb | 2 +- ee/app/models/ee/project.rb | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ee/app/finders/geo/repository_verification_finder.rb b/ee/app/finders/geo/repository_verification_finder.rb index 7280214edc54bb..46a4462358fb3f 100644 --- a/ee/app/finders/geo/repository_verification_finder.rb +++ b/ee/app/finders/geo/repository_verification_finder.rb @@ -61,7 +61,7 @@ def find_reverifiable_wikis(interval:, batch_size:) end def count_verified_repositories - Project.verified_repos.count + ProjectRepositoryState.verified_repos.count end def count_verified_wikis diff --git a/ee/app/models/ee/project.rb b/ee/app/models/ee/project.rb index ee228827aa6e28..18faa6cd7b03d5 100644 --- a/ee/app/models/ee/project.rb +++ b/ee/app/models/ee/project.rb @@ -88,7 +88,6 @@ module Project scope :with_wiki_enabled, -> { with_feature_enabled(:wiki) } - scope :verified_repos, -> { joins(:repository_state).merge(ProjectRepositoryState.verified_repos) } scope :verified_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verified_wikis) } scope :verification_failed_repos, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_repos) } scope :verification_failed_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_wikis) } -- GitLab From a6cf8fa55266a6ed95619972a7993cf1e8603977 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:37:22 -0800 Subject: [PATCH 3/7] Optimize count_verified_wikis SQL --- .../geo/repository_verification_finder.rb | 2 +- ee/app/models/ee/project.rb | 1 - .../repository_verification_finder_spec.rb | 26 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/ee/app/finders/geo/repository_verification_finder.rb b/ee/app/finders/geo/repository_verification_finder.rb index 46a4462358fb3f..a7f6db15bcae9a 100644 --- a/ee/app/finders/geo/repository_verification_finder.rb +++ b/ee/app/finders/geo/repository_verification_finder.rb @@ -65,7 +65,7 @@ def count_verified_repositories end def count_verified_wikis - Project.verified_wikis.count + ProjectRepositoryState.verified_wikis.count end def count_verification_failed_repositories diff --git a/ee/app/models/ee/project.rb b/ee/app/models/ee/project.rb index 18faa6cd7b03d5..ed2903be3abf53 100644 --- a/ee/app/models/ee/project.rb +++ b/ee/app/models/ee/project.rb @@ -88,7 +88,6 @@ module Project scope :with_wiki_enabled, -> { with_feature_enabled(:wiki) } - scope :verified_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verified_wikis) } scope :verification_failed_repos, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_repos) } scope :verification_failed_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_wikis) } scope :for_plan_name, -> (name) { joins(namespace: :plan).where(plans: { name: name }) } diff --git a/ee/spec/finders/geo/repository_verification_finder_spec.rb b/ee/spec/finders/geo/repository_verification_finder_spec.rb index 2b3126b19cf4ab..5626768dcbcf71 100644 --- a/ee/spec/finders/geo/repository_verification_finder_spec.rb +++ b/ee/spec/finders/geo/repository_verification_finder_spec.rb @@ -278,4 +278,30 @@ end end end + + describe '#count_verified_wikis' do + context 'when a wiki is verified' do + it 'includes the wiki' do + create(:repository_state, :wiki_verified) + + expect(subject.count_verified_wikis).to eq(1) + end + end + + context 'when a wiki failed verification' do + it 'excludes the wiki' do + create(:repository_state, :wiki_failed) + + expect(subject.count_verified_wikis).to eq(0) + end + end + + context 'when a wiki has outdated verification' do + it 'excludes the wiki' do + create(:repository_state, :wiki_outdated) + + expect(subject.count_verified_wikis).to eq(0) + end + end + end end -- GitLab From a97b9e5b7e6ae89e35d93167062dc19f926e6a99 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:41:34 -0800 Subject: [PATCH 4/7] Optimize count_verification_failed_repositories SQL This method has existing tests. --- ee/app/finders/geo/repository_verification_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/app/finders/geo/repository_verification_finder.rb b/ee/app/finders/geo/repository_verification_finder.rb index a7f6db15bcae9a..127250924a6162 100644 --- a/ee/app/finders/geo/repository_verification_finder.rb +++ b/ee/app/finders/geo/repository_verification_finder.rb @@ -69,7 +69,7 @@ def count_verified_wikis end def count_verification_failed_repositories - Project.verification_failed_repos.count + ProjectRepositoryState.verification_failed_repos.count end def count_verification_failed_wikis -- GitLab From 984c05b197602792d75a21a6ca7f6e367710d758 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:42:35 -0800 Subject: [PATCH 5/7] Optimize count_verification_failed_wikis SQL This method has existing tests. --- ee/app/finders/geo/repository_verification_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/app/finders/geo/repository_verification_finder.rb b/ee/app/finders/geo/repository_verification_finder.rb index 127250924a6162..0317b55bba2ee9 100644 --- a/ee/app/finders/geo/repository_verification_finder.rb +++ b/ee/app/finders/geo/repository_verification_finder.rb @@ -73,7 +73,7 @@ def count_verification_failed_repositories end def count_verification_failed_wikis - Project.verification_failed_wikis.count + ProjectRepositoryState.verification_failed_wikis.count end private -- GitLab From d7398ff533c4001f018bff60cd796f2642a56d9e Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 11:56:26 -0800 Subject: [PATCH 6/7] Add changelog entry --- .../unreleased/mk-optimize-repo-verification-counts.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 ee/changelogs/unreleased/mk-optimize-repo-verification-counts.yml diff --git a/ee/changelogs/unreleased/mk-optimize-repo-verification-counts.yml b/ee/changelogs/unreleased/mk-optimize-repo-verification-counts.yml new file mode 100644 index 00000000000000..960938e22ff0f4 --- /dev/null +++ b/ee/changelogs/unreleased/mk-optimize-repo-verification-counts.yml @@ -0,0 +1,5 @@ +--- +title: 'Geo: Optimize repository and wiki verification counts' +merge_request: 9939 +author: +type: performance -- GitLab From f10a17777e8cd461365de5a3cc965e43523de139 Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Fri, 8 Mar 2019 12:48:08 -0800 Subject: [PATCH 7/7] Fix Rubocop failure --- ee/app/models/ee/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/app/models/ee/project.rb b/ee/app/models/ee/project.rb index ed2903be3abf53..6962918b491a00 100644 --- a/ee/app/models/ee/project.rb +++ b/ee/app/models/ee/project.rb @@ -86,7 +86,7 @@ module Project .where("import_state.retry_count <= ?", ::Gitlab::Mirror::MAX_RETRY) end - scope :with_wiki_enabled, -> { with_feature_enabled(:wiki) } + scope :with_wiki_enabled, -> { with_feature_enabled(:wiki) } scope :verification_failed_repos, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_repos) } scope :verification_failed_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_wikis) } -- GitLab