Skip to content

Remove zoekt_nodes unique URL indices

Dmitry Gruzd requested to merge zoekt-nodes-remove-unique-url into master

What does this MR do and why?

As I was trying to add internalAPI to GDK mode for zoekt-indexer, I encountered a bug with our current validation logic for index_base_url and search_base_url.

If you execute truncate on a node, it won't be able to register anymore because it will try to use the same base URLs and fail validations and unique indices. The same situation can happen with self-managed customers if they re-use previously used URL when replacing a node.

To fix that we need to remove those validations/indices.

Screenshots or screen recordings

Screenshots are required for UI changes, and strongly recommended for all other merge requests.

2023/11/26 20:21:47 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:21:55 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:22:05 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:22:15 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:22:59 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:23:00 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:23:08 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:23:19 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:23:25 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}
2023/11/26 20:23:35 TASK_REQUEST_ERROR: TaskRequest responded with [422] {"message":"422 Unprocessable Entity"}

How to set up and validate locally

[28] pry(main)> Search::Zoekt::Node.delete_all
=> 1
[29] pry(main)> Search::Zoekt::Node.find_or_initialize_by_task_request("uuid" => "0b24c06d-92f0-4d00-9403-1143fb6b7378", "node.url" => "http://localhost:6080", "disk.used" => 0, "disk.all" => 0, "node.name" => "zoekt_node").save!
=> true
[30] pry(main)> Search::Zoekt::Node.find_or_initialize_by_task_request("uuid" => "0b24c06d-92f0-4d00-9403-1143fb6b7300", "node.url" => "http://localhost:6080", "disk.used" => 0, "disk.all" => 0, "node.name" => "new_zoekt_node").save!
ActiveRecord::RecordInvalid: Validation failed: Index base url has already been taken, Search base url has already been taken
from /Users/dgruzd/.asdf/installs/ruby/3.1.4/lib/ruby/gems/3.1.0/gems/activerecord-7.0.8/lib/active_record/validations.rb:80:in `raise_validation_error'

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Dmitry Gruzd

Merge request reports