From 780c1e54a3b4b04fb3dcaa1815cfd22a2b3991ca Mon Sep 17 00:00:00 2001 From: Valentyn Faychuk Date: Sun, 22 Dec 2024 18:36:25 +0200 Subject: [PATCH] stability improvements --- src/datastore.rs | 23 ++++++++++++----------- src/grpc/server.rs | 2 +- src/http_server.rs | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/datastore.rs b/src/datastore.rs index 73e6bab..9bf53a1 100644 --- a/src/datastore.rs +++ b/src/datastore.rs @@ -26,7 +26,7 @@ pub struct NodeInfo { impl NodeInfo { pub fn is_newer_than(&self, older_self: &Self) -> bool { - self.keepalive > older_self.keepalive + self.keepalive >= older_self.keepalive } pub fn to_json(&self) -> String { @@ -188,17 +188,18 @@ impl State { } /// This returns true if NodeInfo got modified. - pub fn process_node_update(&self, (ip, mut node_info): (String, NodeInfo)) -> bool { - if let Some(old_node) = self.nodes.get(&ip) { - if !node_info.is_newer_than(&old_node) { - return false; - } - node_info.public = node_info.public || old_node.public; + pub fn process_node_update(&self, (ip, node_info): (String, NodeInfo)) -> bool { + let is_update_new = self + .nodes + .get(&ip) + .map(|curr_info| node_info.is_newer_than(&curr_info)) + .unwrap_or(true); + if is_update_new { + println!("Inserting: {}, {}", ip, node_info.to_json()); + node_info.log(&ip); + self.nodes.insert(ip, node_info); } - println!("Inserting: {}, {}", ip, node_info.to_json()); - node_info.log(&ip); - self.nodes.insert(ip, node_info); - true + is_update_new } pub fn get_node_list(&self) -> Vec<(String, NodeInfo)> { diff --git a/src/grpc/server.rs b/src/grpc/server.rs index 8d148f9..a11b13e 100644 --- a/src/grpc/server.rs +++ b/src/grpc/server.rs @@ -175,8 +175,8 @@ impl Update for MyServer { } } } - yield Err(error_status); state.decrease_mratls_conns(); + yield Err(error_status); }; Ok(Response::new(Box::pin(stream) as Self::GetUpdatesStream)) diff --git a/src/http_server.rs b/src/http_server.rs index b4f8aaa..305f71a 100644 --- a/src/http_server.rs +++ b/src/http_server.rs @@ -33,7 +33,7 @@ impl From<(String, datastore::NodeInfo)> for NodesResp { let last_keepalive: DateTime = node_info.keepalive.into(); let joined_at = joined_at.format("%Y-%m-%d %H:%M:%S").to_string(); let last_keepalive = last_keepalive.format("%Y-%m-%d %H:%M:%S").to_string(); - crate::http_server::NodesResp { + NodesResp { ip, joined_at, last_keepalive,