fn handle_pod_event()

in nfm-controller/src/kubernetes/kubernetes_metadata_collector.rs [163:205]


    fn handle_pod_event(
        pod_event_result: Result<Event<Pod>, watcher::Error>,
        pod_info_root_map: Arc<Mutex<HashMap<IpAddr, HashMap<i32, PodInfo>>>>,
    ) {
        let pod_event = match pod_event_result {
            Ok(event) => event,
            Err(err) => {
                info!(message = err.to_string(); "watcher encountered an error, will autorecover in next poll");
                return;
            }
        };

        match pod_event {
            Event::Apply(pod) | Event::InitApply(pod) => {
                let ports = Self::get_tcp_ports_from_pod(&pod);
                if let Some(pod_ip) = Self::get_ip_from_pod(&pod) {
                    let mut pod_info = pod_info_root_map.lock().unwrap();
                    for port in &ports {
                        pod_info
                            .entry(pod_ip)
                            .or_default()
                            .entry(*port)
                            .or_insert_with(||
                                // Only insert if pod info for this port doesn't exist.
                                // If its already filled by endpoint slice info, do not override it because it will contain more info.
                                // In case this pod event comes before endpoint slice event, that is alright as endpoint slice event will override it.
                                PodInfo {
                                    name: pod.name_any(),
                                    ..Default::default()
                                });
                    }
                }
            }
            Event::Delete(pod) => {
                if let Some(pod_ip) = Self::get_ip_from_pod(&pod) {
                    let ports = Self::get_tcp_ports_from_pod(&pod);
                    let mut pod_info = pod_info_root_map.lock().unwrap();
                    Self::purge_pod_ip_ports_from_pod_info(&mut pod_info, &pod_ip, &ports);
                }
            }
            _ => {}
        }
    }