consider sidecar containers in getFinishTimeFromContainers

This commit is contained in:
AxeZhan 2024-05-18 22:08:26 +08:00
parent a31030543c
commit e4348a1210
2 changed files with 36 additions and 6 deletions

View File

@ -183,12 +183,18 @@ func getFinishedTime(p *v1.Pod) time.Time {
} }
func getFinishTimeFromContainers(p *v1.Pod) *time.Time { func getFinishTimeFromContainers(p *v1.Pod) *time.Time {
var finishTime *time.Time finishTime := latestFinishTime(nil, p.Status.ContainerStatuses)
for _, containerState := range p.Status.ContainerStatuses { // We need to check InitContainerStatuses here also,
if containerState.State.Terminated == nil { // because with the sidecar (restartable init) containers,
return nil // sidecar containers will always finish later than regular containers.
} return latestFinishTime(finishTime, p.Status.InitContainerStatuses)
if containerState.State.Terminated.FinishedAt.Time.IsZero() { }
func latestFinishTime(prevFinishTime *time.Time, cs []v1.ContainerStatus) *time.Time {
var finishTime = prevFinishTime
for _, containerState := range cs {
if containerState.State.Terminated == nil ||
containerState.State.Terminated.FinishedAt.Time.IsZero() {
return nil return nil
} }
if finishTime == nil || finishTime.Before(containerState.State.Terminated.FinishedAt.Time) { if finishTime == nil || finishTime.Before(containerState.State.Terminated.FinishedAt.Time) {

View File

@ -355,6 +355,30 @@ func TestGetFinishedTime(t *testing.T) {
}, },
wantFinishTime: defaultTestTime, wantFinishTime: defaultTestTime,
}, },
// In this case, init container is stopped after the regular containers.
// This is because with the sidecar (restartable init) containers,
// sidecar containers will always finish later than regular containers.
"Pod with init container and all containers terminated": {
pod: v1.Pod{
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
{
State: v1.ContainerState{
Terminated: &v1.ContainerStateTerminated{FinishedAt: metav1.NewTime(defaultTestTime.Add(-1 * time.Second))},
},
},
},
InitContainerStatuses: []v1.ContainerStatus{
{
State: v1.ContainerState{
Terminated: &v1.ContainerStateTerminated{FinishedAt: metav1.NewTime(defaultTestTime)},
},
},
},
},
},
wantFinishTime: defaultTestTime,
},
} }
for name, tc := range testCases { for name, tc := range testCases {