The static service stats are currently only added to the HashSet in the StaticNodeInfo struct, but for an upcoming patch these stats need to be retrieved independently from the node these are on.
Signed-off-by: Daniel Kral <[email protected]> --- .../bindings/resource_scheduling_static.rs | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/pve-rs/src/bindings/resource_scheduling_static.rs b/pve-rs/src/bindings/resource_scheduling_static.rs index 4abf742..3764aaa 100644 --- a/pve-rs/src/bindings/resource_scheduling_static.rs +++ b/pve-rs/src/bindings/resource_scheduling_static.rs @@ -24,9 +24,14 @@ pub mod pve_rs_resource_scheduling_static { services: HashMap<String, StaticServiceUsage>, } + struct StaticServiceInfo { + stats: StaticServiceUsage, + nodes: HashSet<String>, + } + struct Usage { nodes: HashMap<String, StaticNodeInfo>, - service_nodes: HashMap<String, HashSet<String>>, + services: HashMap<String, StaticServiceInfo>, } /// A scheduler instance contains the resource usage by node. @@ -39,7 +44,7 @@ pub mod pve_rs_resource_scheduling_static { pub fn new(#[raw] class: Value) -> Result<Value, Error> { let inner = Usage { nodes: HashMap::new(), - service_nodes: HashMap::new(), + services: HashMap::new(), }; Ok(perlmod::instantiate_magic!( @@ -81,12 +86,12 @@ pub mod pve_rs_resource_scheduling_static { if let Some(node) = usage.nodes.remove(nodename) { for (sid, _) in node.services.iter() { - match usage.service_nodes.get_mut(sid) { - Some(service_nodes) => { - service_nodes.remove(nodename); + match usage.services.get_mut(sid) { + Some(service) => { + service.nodes.remove(nodename); } None => bail!( - "service '{}' not present in service_nodes hashmap while removing node '{}'", + "service '{}' not present in services hashmap while removing node '{}'", sid, nodename ), @@ -138,15 +143,19 @@ pub mod pve_rs_resource_scheduling_static { None => bail!("node '{}' not present in usage hashmap", nodename), } - if let Some(service_nodes) = usage.service_nodes.get_mut(sid) { - if service_nodes.contains(nodename) { + if let Some(service) = usage.services.get_mut(sid) { + if service.nodes.contains(nodename) { bail!("node '{}' already added to service '{}'", nodename, sid); } - service_nodes.insert(nodename.to_string()); + service.nodes.insert(nodename.to_string()); } else { - let service_nodes = HashSet::from([nodename.to_string()]); - usage.service_nodes.insert(sid.to_string(), service_nodes); + let service = StaticServiceInfo { + stats: service_usage, + nodes: HashSet::from([nodename.to_string()]), + }; + + usage.services.insert(sid.to_string(), service); } Ok(()) @@ -157,8 +166,8 @@ pub mod pve_rs_resource_scheduling_static { fn remove_service_usage(#[try_from_ref] this: &Scheduler, sid: &str) -> Result<(), Error> { let mut usage = this.inner.lock().unwrap(); - if let Some(nodes) = usage.service_nodes.remove(sid) { - for nodename in &nodes { + if let Some(service) = usage.services.remove(sid) { + for nodename in &service.nodes { match usage.nodes.get_mut(nodename) { Some(node) => { node.services.remove(sid); -- 2.47.3
