From e8538d9b76abe944a61eab10bfc2a580974f25fd Mon Sep 17 00:00:00 2001 From: nolancon Date: Fri, 14 Feb 2020 03:38:39 +0000 Subject: [PATCH] Add mutex to Topology Manager Add/RemoveContainer This was exposed as a potential bug during e2e test debugging of this PR. --- pkg/kubelet/cm/topologymanager/topology_manager.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index dab59aa8aa6..f17f3c04c83 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -18,6 +18,7 @@ package topologymanager import ( "fmt" + "sync" "k8s.io/api/core/v1" "k8s.io/klog" @@ -54,6 +55,7 @@ type Manager interface { } type manager struct { + mutex sync.Mutex //The list of components registered with the Manager hintProviders []HintProvider //Mapping of a Pods mapping of Containers and their TopologyHints @@ -189,13 +191,18 @@ func (m *manager) AddHintProvider(h HintProvider) { } func (m *manager) AddContainer(pod *v1.Pod, containerID string) error { + m.mutex.Lock() + defer m.mutex.Unlock() + m.podMap[containerID] = string(pod.UID) return nil } func (m *manager) RemoveContainer(containerID string) error { - klog.Infof("[topologymanager] RemoveContainer - Container ID: %v", containerID) + m.mutex.Lock() + defer m.mutex.Unlock() + klog.Infof("[topologymanager] RemoveContainer - Container ID: %v", containerID) podUIDString := m.podMap[containerID] delete(m.podMap, containerID) if _, exists := m.podTopologyHints[podUIDString]; exists {