Zoekt: Only enable global search when nodes are online
What does this MR do and why?
This is related to Zoekt attempts to search offline nodes (#543145 - closed)
I've discovered that Search::Zoekt::RoutingService returns offline nodes
Steps to reproduce
- Stop Zoekt processes
- Wait until the nodes are offline
- Execute
Search::Zoekt::RoutingService.execute(Project.where(id: [7])) - It will return offline nodes
This MR fixes this problem by ensuring that we only return online nodes.
Query plans
Before
def before
ActiveRecord::Base.logger = Logger.new $stdout
projects = Project.inside_path('gitlab-org')
projects.without_order.joins(zoekt_repositories: { zoekt_index: { replica: :zoekt_enabled_namespace } })
.merge(Search::Zoekt::EnabledNamespace.search_enabled).merge(Search::Zoekt::Replica.ready)
.pluck(:id, :zoekt_node_id)
true
end
After
def after
ActiveRecord::Base.logger = Logger.new $stdout
projects = Project.inside_path('gitlab-org')
projects.without_order
.joins(zoekt_repositories: { zoekt_index: { replica: :zoekt_enabled_namespace, node: nil } })
.merge(Search::Zoekt::EnabledNamespace.search_enabled)
.merge(Search::Zoekt::Replica.ready)
.merge(Search::Zoekt::Node.online)
.pluck(:id, :zoekt_node_id)
true
end
References
Screenshots or screen recordings
| Before | After |
|---|---|
How to set up and validate locally
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Related to #550604 (closed)
Edited by Dmitry Gruzd