From 967405f0bb749878e85ba79c24e514aec4d4a6d0 Mon Sep 17 00:00:00 2001 From: Yu-Ju Hong Date: Wed, 15 Apr 2015 11:39:57 -0700 Subject: [PATCH] Fix locking issue in pod manager --- pkg/kubelet/pod_manager.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/pod_manager.go b/pkg/kubelet/pod_manager.go index 562a039c09b..1f261e87641 100644 --- a/pkg/kubelet/pod_manager.go +++ b/pkg/kubelet/pod_manager.go @@ -249,22 +249,25 @@ func (self *basicPodManager) TranslatePodUID(uid types.UID) types.UID { return uid } -func (self *basicPodManager) getFullNameMaps() (map[string]*api.Pod, map[string]*api.Pod) { +func (self *basicPodManager) getOrphanedMirrorPodNames() []string { self.lock.RLock() defer self.lock.RUnlock() - return self.podByFullName, self.mirrorPodByFullName + var podFullNames []string + for podFullName := range self.mirrorPodByFullName { + if _, ok := self.podByFullName[podFullName]; !ok { + podFullNames = append(podFullNames, podFullName) + } + } + return podFullNames } // Delete all mirror pods which do not have associated static pods. This method // sends deletion requets to the API server, but does NOT modify the internal // pod storage in basicPodManager. func (self *basicPodManager) DeleteOrphanedMirrorPods() { - podByFullName, mirrorPodByFullName := self.getFullNameMaps() - - for podFullName := range mirrorPodByFullName { - if _, ok := podByFullName[podFullName]; !ok { - self.mirrorClient.DeleteMirrorPod(podFullName) - } + podFullNames := self.getOrphanedMirrorPodNames() + for _, podFullName := range podFullNames { + self.mirrorClient.DeleteMirrorPod(podFullName) } }