Zoekt: [Rails] Allow indexing projects without a repository
Background
Currently, we have two issues with indexing non-existing and empty repositories:
-
empty_repo?check that blows up when used with non-existing repositories -
gitaly_payloadthat blows up when used with such a repository
Proposal
We should:
- Replace
project.empty_repo?with!project.repo_exists? - Allow returning empty gitaly connection info if there's no repository, or it's empty (
!project.repo_exists?) to fix the existing exceptions (please guard this via::Search::Zoekt.skip_empty_repositories?or another FF) to ensure that we update the indexer before enabling the FF - Send a flag
MissingRepo: !project.repo_exists?as part of theindex_repo_payload
Click to expand
Potential diff:
diff --git i/ee/app/services/search/zoekt/indexing_task_service.rb w/ee/app/services/search/zoekt/indexing_task_service.rb
index fcef625db549..756cc7ff9140 100644
--- i/ee/app/services/search/zoekt/indexing_task_service.rb
+++ w/ee/app/services/search/zoekt/indexing_task_service.rb
@@ -57,7 +57,7 @@ def logger
def preflight_check?
return true if task_type == :delete_repo
return false unless project
- return false if ::Search::Zoekt.skip_empty_repositories? && project.empty_repo?
+ return false if ::Search::Zoekt.skip_empty_repositories? && !project.repo_exists?
true
end
diff --git i/ee/app/services/search/zoekt/task_serializer_service.rb w/ee/app/services/search/zoekt/task_serializer_service.rb
index 957d62f57311..41356955f142 100644
--- i/ee/app/services/search/zoekt/task_serializer_service.rb
+++ w/ee/app/services/search/zoekt/task_serializer_service.rb
@@ -101,6 +101,8 @@ def delete_graph_repo_payload
end
def gitaly_payload(project)
+ return {} unless project.repo_exists?
+
repository_storage = project.repository_storage
connection_info = Gitlab::GitalyClient.connection_data(repository_storage)
repository_path = "#{project.repository.disk_path}.git"
Note
We might have other empty_repo? checks in the Zoekt codebase. Ideally, we should replace these as well
Edited by Dmitry Gruzd