Skip to content

Commit

Permalink
Fix: Wait::members() should not count learners as members
Browse files Browse the repository at this point in the history
`Wait::members()` waits until membership becomes the expected value.
It should not check against all nodes.
Instead, it should only check voters, excluding learners.
  • Loading branch information
drmingdrmer committed Mar 4, 2023
1 parent 703a5cf commit b5caa44
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
2 changes: 1 addition & 1 deletion openraft/src/metrics/wait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ where
) -> Result<RaftMetrics<NID, N>, WaitError> {
self.metrics(
|x| {
let got = x.membership_config.membership().nodes().map(|(nid, _)| *nid).collect::<BTreeSet<_>>();
let got = x.membership_config.membership().voter_ids().collect::<BTreeSet<_>>();
want_members == got
},
&format!("{} .members -> {:?}", msg.to_string(), want_members),
Expand Down
3 changes: 2 additions & 1 deletion openraft/src/metrics/wait_test.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::sync::Arc;
use std::time::Duration;

use maplit::btreemap;
use maplit::btreeset;
use tokio::sync::watch;
use tokio::time::sleep;
Expand Down Expand Up @@ -90,7 +91,7 @@ async fn test_wait() -> anyhow::Result<()> {
let mut update = init.clone();
update.membership_config = Arc::new(StoredMembership::new(
None,
Membership::new(vec![btreeset! {1,2}], None),
Membership::new(vec![btreeset! {1,2}], btreemap! {3=>()}),
));
let rst = tx.send(update);
assert!(rst.is_ok());
Expand Down

0 comments on commit b5caa44

Please sign in to comment.