tpeer.rs - sraft - simple raft implementation
HTML git clone https://git.parazyd.org/sraft
DIR Log
DIR Files
DIR Refs
DIR README
---
tpeer.rs (1285B)
---
1 use std::net::SocketAddr;
2
3 use async_executor::Executor;
4 use async_std::sync::Arc;
5 use clap::Parser;
6 use easy_parallel::Parallel;
7 use simplelog::{ColorChoice, Config, LevelFilter, TermLogger, TerminalMode};
8
9 use sraft::{Raft, RaftRpc};
10
11 #[derive(Parser)]
12 struct Args {
13 #[clap(long, short)]
14 peer: Vec<SocketAddr>,
15
16 #[clap(long, short)]
17 id: u64,
18
19 #[clap(long, short)]
20 listen: SocketAddr,
21 }
22
23 #[async_std::main]
24 async fn main() {
25 let args = Args::parse();
26
27 TermLogger::init(LevelFilter::Debug, Config::default(), TerminalMode::Mixed, ColorChoice::Auto)
28 .unwrap();
29
30 let mut raft = Raft::new(args.id);
31 for (k, v) in args.peer.iter().enumerate() {
32 raft.peers.insert(k as u64, *v);
33 }
34
35 let raft_rpc = RaftRpc(args.listen);
36
37 let ex = Arc::new(Executor::new());
38 let (_signal, shutdown) = async_channel::unbounded::<()>();
39
40 Parallel::new()
41 .each(0..4, |_| smol::future::block_on(ex.run(shutdown.recv())))
42 //
43 .add(|| {
44 smol::future::block_on(async move {
45 raft_rpc.start().await;
46 });
47 Ok(())
48 })
49 //
50 .finish(|| {
51 smol::future::block_on(async move {
52 raft.start().await;
53 })
54 });
55 }