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..16cf975 --- /dev/null +++ b/datacake-multi-raft/Cargo.toml @@ -0,0 +1,22 @@ +[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" +bytecheck = "0.6.9" +thiserror = "1" +flume = "0.10.14" +slog = "2.7.0" + +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"] } + +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..55e26d7 --- /dev/null +++ b/datacake-multi-raft/src/lib.rs @@ -0,0 +1,5 @@ +mod membership; +mod node; + + + 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 diff --git a/datacake-multi-raft/src/node.rs b/datacake-multi-raft/src/node.rs new file mode 100644 index 0000000..e69de29