use nodedb_raft::NodeRole;
use super::core::MultiRaft;
impl MultiRaft {
pub fn commit_index_for(&self, group_id: u64) -> Option<u64> {
self.groups.get(&group_id).map(|n| n.commit_index())
}
pub fn ready_learners(&self, group_id: u64) -> Vec<u64> {
let Some(node) = self.groups.get(&group_id) else {
return Vec::new();
};
if node.role() != NodeRole::Leader {
return Vec::new();
}
let commit = node.commit_index();
node.learners()
.iter()
.copied()
.filter(|&learner| node.match_index_for(learner).unwrap_or(0) >= commit)
.collect()
}
pub fn group_leader(&self, group_id: u64) -> u64 {
self.groups
.get(&group_id)
.map(|n| n.leader_id())
.unwrap_or(0)
}
pub fn group_role_is_leader(&self, group_id: u64) -> bool {
self.groups
.get(&group_id)
.map(|n| n.role() == NodeRole::Leader)
.unwrap_or(false)
}
}