From 032e306573c77304f1fd33250788226014b4dd7c Mon Sep 17 00:00:00 2001 From: Harri Date: Mon, 26 Dec 2022 16:05:35 +0000 Subject: [PATCH 1/6] Add raft base --- Cargo.toml | 1 + datacake-multi-raft/Cargo.toml | 19 +++++++++++++++++++ datacake-multi-raft/src/lib.rs | 0 3 files changed, 20 insertions(+) create mode 100644 datacake-multi-raft/Cargo.toml create mode 100644 datacake-multi-raft/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 6ab5cba..f8f6483 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ default = [ members = [ "datacake-node", "datacake-eventual-consistency", + "datacake-multi-raft", "datacake-crdt", "datacake-sqlite", "datacake-rpc", diff --git a/datacake-multi-raft/Cargo.toml b/datacake-multi-raft/Cargo.toml new file mode 100644 index 0000000..50352bc --- /dev/null +++ b/datacake-multi-raft/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "datacake-multi-raft" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tracing = "0.1.36" +puppet = "0.4.0" +bytecheck = "0.6.9" +thiserror = "1" + +tokio = { version = "1", default-features = false, features = ["sync", "time"] } +rkyv = { version = "0.7.9", features = ["validation"] } + +datacake-rpc = { path = "../datacake-rpc", version = "0.2" } +datacake-node = { path = "../datacake-node", version = "0.1" } +datacake-crdt = { path = "../datacake-crdt", version = "0.3", features = ["rkyv-support"] } diff --git a/datacake-multi-raft/src/lib.rs b/datacake-multi-raft/src/lib.rs new file mode 100644 index 0000000..e69de29 From bcd1b3e2139738803de12bacb644d090266fa7d4 Mon Sep 17 00:00:00 2001 From: Harri Date: Mon, 26 Dec 2022 16:14:07 +0000 Subject: [PATCH 2/6] Adjust toml --- datacake-multi-raft/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/datacake-multi-raft/Cargo.toml b/datacake-multi-raft/Cargo.toml index 50352bc..403b6d7 100644 --- a/datacake-multi-raft/Cargo.toml +++ b/datacake-multi-raft/Cargo.toml @@ -11,6 +11,7 @@ puppet = "0.4.0" bytecheck = "0.6.9" thiserror = "1" +raft = { version = "0.6.0", default-features = false } tokio = { version = "1", default-features = false, features = ["sync", "time"] } rkyv = { version = "0.7.9", features = ["validation"] } From 036e7c546f14cb7269f13a29c7242541c3a17988 Mon Sep 17 00:00:00 2001 From: Harri Date: Mon, 26 Dec 2022 16:30:45 +0000 Subject: [PATCH 3/6] Add membership mode --- datacake-multi-raft/src/lib.rs | 4 ++++ datacake-multi-raft/src/membership.rs | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 datacake-multi-raft/src/membership.rs diff --git a/datacake-multi-raft/src/lib.rs b/datacake-multi-raft/src/lib.rs index e69de29..deb6634 100644 --- a/datacake-multi-raft/src/lib.rs +++ b/datacake-multi-raft/src/lib.rs @@ -0,0 +1,4 @@ +mod membership; + + + diff --git a/datacake-multi-raft/src/membership.rs b/datacake-multi-raft/src/membership.rs new file mode 100644 index 0000000..b7a2526 --- /dev/null +++ b/datacake-multi-raft/src/membership.rs @@ -0,0 +1,13 @@ + +#[derive(Debug)] +/// The type of membership behaviour the cluster should exhibit. +pub enum MembershipMode { + /// Uses a fixed subset of nodes within the system to create the raft cluster. + Fixed(Vec), + /// Similar to [MembershipMode::Fixed] however, this allows for dynamic adding + /// and removal of nodes from the cluster. + Dynamic(Vec), + /// Automatically include all nodes in the system and add nodes which join the + /// cluster. + Auto, +} \ No newline at end of file From 50bcc56822e3caea21f9e30f70e6d3041422943a Mon Sep 17 00:00:00 2001 From: Harri Date: Mon, 26 Dec 2022 17:18:24 +0000 Subject: [PATCH 4/6] Adjust CI --- datacake-rpc/src/net/server.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/datacake-rpc/src/net/server.rs b/datacake-rpc/src/net/server.rs index 4380d7b..f71c5be 100644 --- a/datacake-rpc/src/net/server.rs +++ b/datacake-rpc/src/net/server.rs @@ -39,6 +39,8 @@ pub(crate) async fn start_rpc_server( if let Err(e) = server.await { error!(error = ?e, "Server failed to handle requests."); + } else { + info!("RPC system has shutdown."); } }); From 51c8b77765722b902a18709bf41562738cc6bae0 Mon Sep 17 00:00:00 2001 From: Harri Date: Mon, 26 Dec 2022 17:21:56 +0000 Subject: [PATCH 5/6] Revert "Adjust CI" This reverts commit 50bcc56822e3caea21f9e30f70e6d3041422943a. --- datacake-rpc/src/net/server.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/datacake-rpc/src/net/server.rs b/datacake-rpc/src/net/server.rs index f71c5be..4380d7b 100644 --- a/datacake-rpc/src/net/server.rs +++ b/datacake-rpc/src/net/server.rs @@ -39,8 +39,6 @@ pub(crate) async fn start_rpc_server( if let Err(e) = server.await { error!(error = ?e, "Server failed to handle requests."); - } else { - info!("RPC system has shutdown."); } }); From 19bfcf2a7e91b9f5bf8a66598c87615f6865a7b0 Mon Sep 17 00:00:00 2001 From: Harri Date: Thu, 29 Dec 2022 16:45:55 +0000 Subject: [PATCH 6/6] Add where we got to --- datacake-multi-raft/Cargo.toml | 6 ++++-- datacake-multi-raft/src/lib.rs | 1 + datacake-multi-raft/src/node.rs | 0 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 datacake-multi-raft/src/node.rs diff --git a/datacake-multi-raft/Cargo.toml b/datacake-multi-raft/Cargo.toml index 403b6d7..16cf975 100644 --- a/datacake-multi-raft/Cargo.toml +++ b/datacake-multi-raft/Cargo.toml @@ -7,11 +7,13 @@ edition = "2021" [dependencies] tracing = "0.1.36" -puppet = "0.4.0" bytecheck = "0.6.9" thiserror = "1" +flume = "0.10.14" +slog = "2.7.0" -raft = { version = "0.6.0", default-features = false } +puppet = { version = "0.4.0", default-features = false } +raft = { git = "https://github.com/lnx-search/raft-rs.git", default-features = false, features = ["protobuf-codec"] } tokio = { version = "1", default-features = false, features = ["sync", "time"] } rkyv = { version = "0.7.9", features = ["validation"] } diff --git a/datacake-multi-raft/src/lib.rs b/datacake-multi-raft/src/lib.rs index deb6634..55e26d7 100644 --- a/datacake-multi-raft/src/lib.rs +++ b/datacake-multi-raft/src/lib.rs @@ -1,4 +1,5 @@ mod membership; +mod node; diff --git a/datacake-multi-raft/src/node.rs b/datacake-multi-raft/src/node.rs new file mode 100644 index 0000000..e69de29