lolraft 0.10.2

A Multi-Raft implementation in Rust language.
Documentation
use super::*;

#[derive(Clone)]
pub struct Thread {
    follower_id: NodeId,
    peers: PeerSvc,
    voter: Ref<Voter>,
}
impl Thread {
    async fn advance_once(&self) -> Result<bool> {
        let election_state = self.voter.read_election_state();
        if !std::matches!(election_state, voter::ElectionState::Leader) {
            return Ok(false);
        }

        let cont = self
            .peers
            .advance_replication(self.follower_id.clone())
            .await?;

        Ok(cont)
    }

    fn do_loop(self) -> ThreadHandle {
        let hdl = tokio::spawn(async move {
            let mut interval = tokio::time::interval(Duration::from_millis(100));
            loop {
                interval.tick().await;
                while let Ok(true) = self.advance_once().await {}
            }
        })
        .abort_handle();

        ThreadHandle(hdl)
    }
}

pub fn new(follower_id: NodeId, peers: PeerSvc, voter: Ref<Voter>) -> ThreadHandle {
    Thread {
        follower_id,
        peers,
        voter,
    }
    .do_loop()
}