Merge pull request #102725 from 249043822/br-podworker

Fix:slow memory leak may be in kubelet podworkers.isWorking
This commit is contained in:
Kubernetes Prow Robot 2021-06-21 16:27:57 -07:00 committed by GitHub
commit 844fa00c5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View File

@ -282,7 +282,8 @@ func (p *podWorkers) checkForUpdates(uid types.UID) {
p.podUpdates[uid] <- workUpdate
delete(p.lastUndeliveredWorkUpdate, uid)
} else {
p.isWorking[uid] = false
// put this line in removeWorker may cause dead lock, so keep reset it here
delete(p.isWorking, uid)
}
}

View File

@ -241,6 +241,30 @@ func TestForgetNonExistingPodWorkers(t *testing.T) {
}
}
func TestIsWorkingClearedAfterForgetPodWorkers(t *testing.T) {
podWorkers, _ := createPodWorkers()
numPods := 20
for i := 0; i < numPods; i++ {
podWorkers.UpdatePod(&UpdatePodOptions{
Pod: newPod(strconv.Itoa(i), "name"),
UpdateType: kubetypes.SyncPodUpdate,
})
}
drainWorkers(podWorkers, numPods)
if len(podWorkers.podUpdates) != numPods {
t.Errorf("Incorrect number of open channels %v", len(podWorkers.podUpdates))
}
podWorkers.ForgetNonExistingPodWorkers(map[types.UID]sets.Empty{})
if len(podWorkers.podUpdates) != 0 {
t.Errorf("Incorrect number of open channels %v", len(podWorkers.podUpdates))
}
if len(podWorkers.isWorking) != 0 {
t.Errorf("Incorrect number of isWorking %v", len(podWorkers.isWorking))
}
}
type simpleFakeKubelet struct {
pod *v1.Pod
mirrorPod *v1.Pod