From 3f043dd8a06a553de91e1bfb84500d66daf97e18 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Tue, 28 May 2019 07:51:27 -0700 Subject: [PATCH] Sort init container statuses using non-nested loop --- pkg/kubelet/kubelet_pods.go | 13 ++++++------- pkg/kubelet/types/types.go | 11 +++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index d5d65e4f1a8..19154e0159f 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -1545,18 +1545,17 @@ func (kl *Kubelet) convertToAPIContainerStatuses(pod *v1.Pod, podStatus *kubecon statuses[container.Name] = status } + // Sort the container statuses since clients of this interface expect the list + // of containers in a pod has a deterministic order. + if isInitContainer { + return kubetypes.SortStatusesOfInitContainers(pod, statuses) + } var containerStatuses []v1.ContainerStatus for _, status := range statuses { containerStatuses = append(containerStatuses, *status) } - // Sort the container statuses since clients of this interface expect the list - // of containers in a pod has a deterministic order. - if isInitContainer { - kubetypes.SortInitContainerStatuses(pod, containerStatuses) - } else { - sort.Sort(kubetypes.SortedContainerStatuses(containerStatuses)) - } + sort.Sort(kubetypes.SortedContainerStatuses(containerStatuses)) return containerStatuses } diff --git a/pkg/kubelet/types/types.go b/pkg/kubelet/types/types.go index b0dff97a78a..c9452a22005 100644 --- a/pkg/kubelet/types/types.go +++ b/pkg/kubelet/types/types.go @@ -85,6 +85,17 @@ func SortInitContainerStatuses(p *v1.Pod, statuses []v1.ContainerStatus) { } } +func SortStatusesOfInitContainers(p *v1.Pod, statusMap map[string]*v1.ContainerStatus) []v1.ContainerStatus { + containers := p.Spec.InitContainers + statuses := []v1.ContainerStatus{} + for _, container := range containers { + if status, found := statusMap[container.Name]; found { + statuses = append(statuses, *status) + } + } + return statuses +} + // Reservation represents reserved resources for non-pod components. type Reservation struct { // System represents resources reserved for non-kubernetes components.