diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index ff7cdfc64..8db96d2fb 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -370,7 +370,7 @@ impl IndexScheduler { // The lowest in the list is the leader. And if we're not the leader // we watch the node right before us to be notified if he dies. // See https://zookeeper.apache.org/doc/current/recipes.html#sc_leaderElection - let clusterized = match self.zookeeper { + let clusterized = match self.zookeeper.clone() { Some(zk) => { // First, load the already existing tasks in the cluster, or, if we're the first one to join the cluster, create the task directory. let tasks_watcher = match zk.create( @@ -459,7 +459,7 @@ impl IndexScheduler { ) { Ok(_) => (), Err(ZkError::NodeExists) => (), - Err(e) => return Err(e.into()), + Err(e) => panic!("{e}"), }; let (_, id) = zk @@ -475,13 +475,13 @@ impl IndexScheduler { let string_id = id.to_string(); // there is at least us in the childrens of election - if childrens[0].ends_with(id.to_string()) { + if childrens[0].ends_with(&string_id) { log::warn!("I'm the leader"); None } else { let should_watch = childrens .into_iter() - .rfind(|path| path[path.len() - id.len()..] < id) + .rfind(|path| &path[path.len() - string_id.len()..] < string_id.as_str()) .unwrap(); log::warn!("I'm a follower When `{should_watch}` die I should check if I'm the new leader"); diff --git a/meilisearch/src/lib.rs b/meilisearch/src/lib.rs index 3aede46eb..69993bc0b 100644 --- a/meilisearch/src/lib.rs +++ b/meilisearch/src/lib.rs @@ -40,7 +40,7 @@ use meilisearch_types::{compression, milli, VERSION_FILE_NAME}; pub use option::Opt; use option::ScheduleSnapshot; use strois::Bucket; -use zookeeper::ZooKeeper; +use zookeeper_client_sync::Zookeeper; use crate::error::MeilisearchHttpError; @@ -140,7 +140,7 @@ enum OnFailure { pub async fn setup_meilisearch( opt: &Opt, - zookeeper: Option>, + zookeeper: Option>, ) -> anyhow::Result<(Arc, Arc)> { let empty_db = is_empty_db(&opt.db_path); let (index_scheduler, auth_controller) = if let Some(ref snapshot_path) = opt.import_snapshot { @@ -219,7 +219,7 @@ pub async fn setup_meilisearch( fn open_or_create_database_unchecked( opt: &Opt, on_failure: OnFailure, - zookeeper: Option>, + zookeeper: Option>, ) -> anyhow::Result<(IndexScheduler, AuthController)> { // we don't want to create anything in the data.ms yet, thus we // wrap our two builders in a closure that'll be executed later. @@ -278,7 +278,7 @@ fn open_or_create_database_unchecked( fn open_or_create_database( opt: &Opt, empty_db: bool, - zookeeper: Option>, + zookeeper: Option>, ) -> anyhow::Result<(IndexScheduler, AuthController)> { if !empty_db { check_version_file(&opt.db_path)?; diff --git a/meilisearch/src/main.rs b/meilisearch/src/main.rs index ad64384df..8db217f5c 100644 --- a/meilisearch/src/main.rs +++ b/meilisearch/src/main.rs @@ -2,7 +2,6 @@ use std::env; use std::io::{stderr, Write}; use std::path::PathBuf; use std::sync::Arc; -use std::time::Duration; use actix_web::http::KeepAlive; use actix_web::web::Data; @@ -13,7 +12,7 @@ use meilisearch::analytics::Analytics; use meilisearch::{analytics, create_app, prototype_name, setup_meilisearch, Opt}; use meilisearch_auth::{generate_master_key, AuthController, MASTER_KEY_MIN_SIZE}; use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor}; -use zookeeper::ZooKeeper; +use zookeeper_client_sync::Zookeeper; #[global_allocator] static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; @@ -65,9 +64,10 @@ async fn main() -> anyhow::Result<()> { _ => (), } - let timeout = Duration::from_millis(2500); - let zookeeper = - opt.zk_url.as_ref().map(|url| Arc::new(ZooKeeper::connect(url, timeout, drop).unwrap())); + let zookeeper = match opt.zk_url { + Some(ref url) => Some(Arc::new(Zookeeper::connect(url).await.unwrap())), + None => None, + }; let (index_scheduler, auth_controller) = setup_meilisearch(&opt, zookeeper).await?; #[cfg(all(not(debug_assertions), feature = "analytics"))]