From 388689238b7dfe5c8ac55b66c1288a02a42729af Mon Sep 17 00:00:00 2001 From: Yu-Ju Hong Date: Fri, 26 Feb 2016 18:41:38 -0800 Subject: [PATCH] pleg: ensure the cache is updated whenever container are removed Even though we don't rely on the cache for garbage collection yet, we should keep it up-to-date. --- pkg/kubelet/pleg/generic.go | 14 +++++++++----- pkg/kubelet/pleg/pleg.go | 9 +++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/pkg/kubelet/pleg/generic.go b/pkg/kubelet/pleg/generic.go index 2d89157d17d..51e795a9913 100644 --- a/pkg/kubelet/pleg/generic.go +++ b/pkg/kubelet/pleg/generic.go @@ -124,17 +124,17 @@ func generateEvent(podID types.UID, cid string, oldState, newState plegContainer case plegContainerExited: return &PodLifecycleEvent{ID: podID, Type: ContainerDied, Data: cid} case plegContainerUnknown: - // Don't generate any event if the status is unknown. - return nil + return &PodLifecycleEvent{ID: podID, Type: ContainerChanged, Data: cid} case plegContainerNonExistent: // We report "ContainerDied" when container was stopped OR removed. We // may want to distinguish the two cases in the future. switch oldState { case plegContainerExited: - // We already reported that the container died before. There is no - // need to do it again. - return nil + // We already reported that the container died before. + return &PodLifecycleEvent{ID: podID, Type: ContainerRemoved, Data: cid} default: + // TODO: We may want to generate a ContainerRemoved event as well. + // It's ok now because no one relies on the ContainerRemoved event. return &PodLifecycleEvent{ID: podID, Type: ContainerDied, Data: cid} } default: @@ -204,6 +204,10 @@ func (g *GenericPLEG) relist() { // Update the internal storage and send out the events. g.podRecords.update(pid) for i := range events { + // Filter out events that are not reliable and no other components use yet. + if events[i].Type == ContainerChanged || events[i].Type == ContainerRemoved { + continue + } g.eventChannel <- events[i] } } diff --git a/pkg/kubelet/pleg/pleg.go b/pkg/kubelet/pleg/pleg.go index 57a80f4481a..c23472ca925 100644 --- a/pkg/kubelet/pleg/pleg.go +++ b/pkg/kubelet/pleg/pleg.go @@ -23,13 +23,14 @@ import ( type PodLifeCycleEventType string const ( - ContainerStarted PodLifeCycleEventType = "ContainerStarted" - ContainerDied PodLifeCycleEventType = "ContainerDied" - NetworkSetupCompleted PodLifeCycleEventType = "NetworkSetupCompleted" - NetworkFailed PodLifeCycleEventType = "NetworkFailed" + ContainerStarted PodLifeCycleEventType = "ContainerStarted" + ContainerDied PodLifeCycleEventType = "ContainerDied" // PodSync is used to trigger syncing of a pod when the observed change of // the state of the pod cannot be captured by any single event above. PodSync PodLifeCycleEventType = "PodSync" + // Do not use the events below because they are disabled in GenericPLEG. + ContainerRemoved PodLifeCycleEventType = "ContainerRemoved" + ContainerChanged PodLifeCycleEventType = "ContainerChanged" ) // PodLifecycleEvent is an event that reflects the change of the pod state.