From 95a3ac447f95fbcf8ff7242d0e6993cf72365f1a Mon Sep 17 00:00:00 2001 From: Kevin Klues Date: Sun, 2 Feb 2020 17:22:06 +0000 Subject: [PATCH] Fix bug in TopologManager RemoveContainer() Previously, we unconditionally removed *all* topology hints from a pod whenever just one container was being removed. This commit makes it so we only remove the hints for the single container being removed, and then conditionally remove the pod from the podTopologyHints[podUID] when no containers left in it. --- pkg/kubelet/cm/topologymanager/topology_manager.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 4e452d71a00..8ae311b471c 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -194,10 +194,17 @@ func (m *manager) AddContainer(pod *v1.Pod, containerID string) error { } func (m *manager) RemoveContainer(containerID string) error { + klog.Infof("[topologymanager] RemoveContainer - Container ID: %v", containerID) + podUIDString := m.podMap[containerID] - delete(m.podTopologyHints, podUIDString) delete(m.podMap, containerID) - klog.Infof("[topologymanager] RemoveContainer - Container ID: %v podTopologyHints: %v", containerID, m.podTopologyHints) + if _, exists := m.podTopologyHints[podUIDString]; exists { + delete(m.podTopologyHints[podUIDString], containerID) + if len(m.podTopologyHints[podUIDString]) == 0 { + delete(m.podTopologyHints, podUIDString) + } + } + return nil }