diff --git a/src/datastore.rs b/src/datastore.rs index e5c1852..9026611 100644 --- a/src/datastore.rs +++ b/src/datastore.rs @@ -231,6 +231,15 @@ impl State { .nth(skip) } + pub async fn update_keepalive(&self) { + let mut nodes = self.nodes.write().await; + if let Some(my_info) = nodes.get_mut(&self.my_ip) { + let mut updated_info = my_info.clone(); + updated_info.keepalive = SystemTime::now(); + let _ = nodes.insert(self.my_ip.clone(), updated_info); + } + } + /// This returns true if the update should be further forwarded /// For example, we never forward our own updates that came back pub async fn process_node_update(&self, (node_ip, node_info): (String, NodeInfo)) -> bool { diff --git a/src/main.rs b/src/main.rs index 90b14f3..e3e3053 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,6 +51,7 @@ pub async fn heartbeat( loop { interval.tick().await; println!("Heartbeat..."); + state.update_keepalive().await; state.remove_inactive_nodes().await; let connected_ips = state.get_connected_ips().await; println!("Connected nodes ({}): {:?}", connected_ips.len(), connected_ips);