Do not delete pod status entry when apiserver returns NotFound error

The logic doesn't apply to static pods as their corresponding mirror pod may
not have been created yet, or may be in the process of recreation. Deleting the
pod status immediately resets the version of the status for the static pod,
while the apiStatusVersion remains unchanged. This could lead to incorrect
versioning and hence stale pod status in the apiserver.
This commit is contained in:
Yu-Ju Hong 2015-12-02 15:56:58 -08:00
parent b7d8221296
commit c8a075ad62
2 changed files with 3 additions and 4 deletions

View File

@ -323,8 +323,9 @@ func (m *manager) syncPod(uid types.UID, status versionedPodStatus) {
// TODO: make me easier to express from client code
pod, err := m.kubeClient.Pods(status.podNamespace).Get(status.podName)
if errors.IsNotFound(err) {
glog.V(3).Infof("Pod %q (%s) was deleted on the server", status.podName, uid)
m.deletePodStatus(uid)
glog.V(3).Infof("Pod %q (%s) does not exist on the server", status.podName, uid)
// If the Pod is deleted the status will be cleared in
// RemoveOrphanedStatuses, so we just ignore the update here.
return
}
if err == nil {

View File

@ -264,8 +264,6 @@ func TestSyncBatchIgnoresNotFound(t *testing.T) {
verifyActions(t, syncer.kubeClient, []testclient.Action{
testclient.GetActionImpl{ActionImpl: testclient.ActionImpl{Verb: "get", Resource: "pods"}},
})
_, found := syncer.GetPodStatus(testPod.UID)
assert.False(t, found, "Pod status should have been deleted")
}
func TestSyncBatch(t *testing.T) {