Skip to content

Commit d9d34f9

Browse files
authored
Merge pull request #34 from NodeDB-Lab/cluster
SWIM membership: failure detector, gossip dissemination, UDP transport
2 parents d4c88df + 087f5ed commit d9d34f9

File tree

27 files changed

+2859
-19
lines changed

27 files changed

+2859
-19
lines changed

Cargo.lock

Lines changed: 19 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nodedb-cluster/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ thiserror = { workspace = true }
2222
tracing = { workspace = true }
2323
tokio = { workspace = true }
2424
rand = { workspace = true }
25+
async-trait = { workspace = true }
2526

2627
# Serialization (compact binary for RPCs — matches nexar wire format)
2728
rkyv = { workspace = true }

nodedb-cluster/src/bootstrap/bootstrap_fn.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ mod tests {
101101
data_dir: _dir.path().to_path_buf(),
102102
force_bootstrap: false,
103103
join_retry: Default::default(),
104+
swim_udp_addr: None,
104105
};
105106

106107
let state = bootstrap(&config, &catalog).unwrap();

nodedb-cluster/src/bootstrap/config.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ pub struct ClusterConfig {
8484
/// (`8` attempts, `32 s` ceiling). Tests override this with a
8585
/// faster policy.
8686
pub join_retry: JoinRetryPolicy,
87+
/// Optional UDP bind address for the SWIM failure detector. `None`
88+
/// disables SWIM entirely — cluster startup then relies solely on
89+
/// the existing raft transport for membership observations. When
90+
/// `Some`, the operator is expected to spawn SWIM separately via
91+
/// [`crate::spawn_swim`] after the cluster is up and feed the
92+
/// seed list from `seed_nodes`.
93+
pub swim_udp_addr: Option<SocketAddr>,
8794
}
8895

8996
/// Result of cluster startup — everything needed to run the Raft loop.

nodedb-cluster/src/bootstrap/join.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ mod tests {
449449
data_dir: _dir1.path().to_path_buf(),
450450
force_bootstrap: false,
451451
join_retry: Default::default(),
452+
swim_udp_addr: None,
452453
};
453454
let state1 = bootstrap(&config1, &catalog1).unwrap();
454455

@@ -497,6 +498,7 @@ mod tests {
497498
data_dir: _dir2.path().to_path_buf(),
498499
force_bootstrap: false,
499500
join_retry: Default::default(),
501+
swim_udp_addr: None,
500502
};
501503

502504
let lifecycle = ClusterLifecycleTracker::new();

nodedb-cluster/src/bootstrap/probe.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ mod tests {
222222
data_dir: std::env::temp_dir(),
223223
force_bootstrap: false,
224224
join_retry: Default::default(),
225+
swim_udp_addr: None,
225226
}
226227
}
227228

nodedb-cluster/src/bootstrap/restart.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ mod tests {
111111
data_dir: _dir.path().to_path_buf(),
112112
force_bootstrap: false,
113113
join_retry: Default::default(),
114+
swim_udp_addr: None,
114115
};
115116

116117
// Bootstrap first.

nodedb-cluster/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,7 @@ pub use lifecycle::{
7878
pub use rdma_transport::{RdmaConfig, RdmaTransport};
7979
pub use rebalance_scheduler::{NodeMetrics, RebalanceScheduler, RebalanceTrigger, SchedulerConfig};
8080
pub use shard_split::{SplitPlan, SplitStrategy, plan_graph_split, plan_vector_split};
81-
pub use swim::{Incarnation, Member, MemberState, MembershipList, SwimConfig, SwimError};
81+
pub use swim::{
82+
Incarnation, Member, MemberState, MembershipList, SwimConfig, SwimError, SwimHandle,
83+
UdpTransport, spawn as spawn_swim,
84+
};

0 commit comments

Comments
 (0)