diff --git a/src/raft/consensus.rs b/src/raft/consensus.rs index a123e0eb6..19f1ed18b 100644 --- a/src/raft/consensus.rs +++ b/src/raft/consensus.rs @@ -2,12 +2,13 @@ use async_std::{ sync::{Arc, Mutex}, task, }; -use std::{cmp::min, collections::HashMap, net::SocketAddr, path::PathBuf, time::Duration}; +use std::{cmp::min, collections::HashMap, path::PathBuf, time::Duration}; use async_executor::Executor; use futures::{select, FutureExt}; use log::{debug, error, info, warn}; use rand::{rngs::OsRng, Rng, RngCore}; +use url::Url; use crate::{ net, @@ -28,7 +29,7 @@ const TIMEOUT: u64 = 300; const TIMEOUT_NODES: u64 = 300; async fn load_node_ids_loop( - nodes: Arc>>, + nodes: Arc>>, p2p: net::P2pPtr, role: Role, ) -> Result<()> { @@ -42,7 +43,7 @@ async fn load_node_ids_loop( let nodes_ip = hosts.load_all().await.clone(); let mut nodes = nodes.lock().await; for ip in nodes_ip.iter() { - nodes.insert(NodeId::from(*ip), *ip); + nodes.insert(NodeId::from(ip.clone()), ip.clone()); } drop(nodes); } @@ -86,7 +87,7 @@ pub struct Raft { sent_length: MapLength, acked_length: MapLength, - nodes: Arc>>, + nodes: Arc>>, last_term: u64, @@ -99,7 +100,7 @@ pub struct Raft { } impl Raft { - pub fn new(addr: Option, db_path: PathBuf) -> Result { + pub fn new(addr: Option, db_path: PathBuf) -> Result { if db_path.to_str().is_none() { error!(target: "raft", "datastore path is incorrect"); return Err(Error::ParseFailed("unable to parse pathbuf to str")) @@ -590,7 +591,7 @@ impl Raft { } } - fn acks(&self, nodes: HashMap, length: u64) -> HashMap { + fn acks(&self, nodes: HashMap, length: u64) -> HashMap { nodes .into_iter() .filter(|n| { diff --git a/src/raft/primitives.rs b/src/raft/primitives.rs index 968192ee2..5826e4b40 100644 --- a/src/raft/primitives.rs +++ b/src/raft/primitives.rs @@ -1,4 +1,6 @@ -use std::{collections::HashMap, io, net::SocketAddr}; +use std::{collections::HashMap, io}; + +use url::Url; use crate::{ impl_vec, @@ -82,8 +84,8 @@ pub struct Log { #[derive(Clone, Debug, Eq, PartialEq, Hash, SerialDecodable, SerialEncodable)] pub struct NodeId(pub Vec); -impl From for NodeId { - fn from(addr: SocketAddr) -> Self { +impl From for NodeId { + fn from(addr: Url) -> Self { let ser = serialize(&addr); let hash = blake3::hash(&ser).as_bytes().to_vec(); Self(hash)