From 1969901436ac5286716d5c6d150576b469833266 Mon Sep 17 00:00:00 2001 From: Nikita Vilunov Date: Thu, 1 Feb 2024 11:12:42 +0100 Subject: [PATCH] wip --- crates/lavina-core/src/clustering/mod.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/crates/lavina-core/src/clustering/mod.rs b/crates/lavina-core/src/clustering/mod.rs index 5a7fb1d..fcd4200 100644 --- a/crates/lavina-core/src/clustering/mod.rs +++ b/crates/lavina-core/src/clustering/mod.rs @@ -29,6 +29,17 @@ use crate::terminator::Terminator; - определение модели данных - определение протокола общения между нодами - модель верификации поведения нод + +Лидер кластера +- выбирается из нод, которые уже в кластере +- не больше одного +- занимается аллокацией шардов на ноды + +Лидер шарда +- выбирается лидером кластера из реплик шарда +- принимает команды на изменение сущностей в шарде +- посылает изменения репликам + */ #[derive(Deserialize, Debug, Clone)] @@ -74,12 +85,10 @@ impl ClusterRegistry { let listener = TcpListener::bind(config.listen_on).await?; let listener_task = start_connection_listener(listener, inner.clone()).await; let mut client = EtcdClient::connect(&[config.etcd_address], None).await?; - dbg!(client.maintenance_client().status().await?); - dbg!(client.leader(b"kek").await); - dbg!(client.kv_client().get(b"kek", None).await?); - let a = dbg!(client.election_client().campaign(b"kek", b"my name", 0).await?); - dbg!(client.leader(b"kek").await?); - dbg!(client.election_client().resign(Some(ResignOptions::new().with_leader(a.leader().unwrap().clone()))).await); + let campaign_response = client.election_client().campaign(b"kek", b"my name", 0).await?; + dbg!(campaign_response); + let leader = client.leader("kek").await?; + dbg!(leader); Ok(ClusterRegistry {