diff --git a/src/common/infra/cluster/mod.rs b/src/common/infra/cluster/mod.rs index cff9ae3fb6..ccd1ae40d3 100644 --- a/src/common/infra/cluster/mod.rs +++ b/src/common/infra/cluster/mod.rs @@ -326,7 +326,18 @@ async fn watch_node_list() -> Result<()> { match ev { Event::Put(ev) => { let item_key = ev.key.strip_prefix(key).unwrap(); - let mut item_value: Node = json::from_slice(&ev.value.unwrap()).unwrap(); + let mut item_value: Node = match json::from_slice(ev.value.as_ref().unwrap()) { + Ok(v) => v, + Err(e) => { + let value_str = String::from_utf8_lossy(ev.value.as_ref().unwrap()); + log::error!( + "[CLUSTER] watch_node_list: error parsing node: {}, payload: {}", + e, + value_str + ); + continue; + } + }; let (_broadcasted, exist) = match NODES.read().await.get(item_key) { Some(v) => (v.broadcasted, item_value.is_same(v)), None => (false, false), diff --git a/src/config/src/utils/sysinfo/mod.rs b/src/config/src/utils/sysinfo/mod.rs index 2bf32d6fb5..bc1c92ce6b 100644 --- a/src/config/src/utils/sysinfo/mod.rs +++ b/src/config/src/utils/sysinfo/mod.rs @@ -41,7 +41,14 @@ pub struct NodeMetrics { /// Get the node running metrics pub fn get_node_metrics() -> NodeMetrics { let cpu_total = get_cpu_limit(); - let cpu_usage = get_cpu_usage() / cpu_total as f32; + let mut cpu_usage = get_cpu_usage() / cpu_total as f32; + if cpu_usage.is_infinite() || cpu_usage.is_nan() { + log::warn!( + "CPU usage is infinite or NaN, setting to 0. cpu_usage: {}, cpu_total: {cpu_total}", + get_cpu_usage() + ); + cpu_usage = 0.0; + } let memory_total = get_memory_limit(); let memory_usage = get_memory_usage(); let tcp_conns = get_tcp_connections();