mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 12:15:52 +00:00
fix concurrent read/write to map error caused by SetInitContainersAndStatuses in kubelet
This commit is contained in:
parent
545f749a0d
commit
8554d8e0db
@ -18,10 +18,8 @@ limitations under the License.
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||
"k8s.io/kubernetes/pkg/client/cache"
|
||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
|
||||
"k8s.io/kubernetes/pkg/fields"
|
||||
@ -40,11 +38,7 @@ func newSourceApiserverFromLW(lw cache.ListerWatcher, updates chan<- interface{}
|
||||
send := func(objs []interface{}) {
|
||||
var pods []*v1.Pod
|
||||
for _, o := range objs {
|
||||
pod := o.(*v1.Pod)
|
||||
if err := podutil.SetInitContainersAndStatuses(pod); err != nil {
|
||||
glog.Error(err)
|
||||
}
|
||||
pods = append(pods, pod)
|
||||
pods = append(pods, o.(*v1.Pod))
|
||||
}
|
||||
updates <- kubetypes.PodUpdate{Pods: pods, Op: kubetypes.SET, Source: kubetypes.ApiserverSource}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import (
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||
"k8s.io/kubernetes/pkg/api/validation"
|
||||
"k8s.io/kubernetes/pkg/client/record"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
@ -254,6 +255,17 @@ func (s *podStorage) merge(source string, change interface{}) (adds, updates, de
|
||||
}
|
||||
|
||||
update := change.(kubetypes.PodUpdate)
|
||||
// The InitContainers and InitContainerStatuses fields are lost during
|
||||
// serialization and deserialization. They are conveyed via Annotations.
|
||||
// Setting these fields here so that kubelet doesn't have to check for
|
||||
// annotations.
|
||||
if source == kubetypes.ApiserverSource {
|
||||
for _, pod := range update.Pods {
|
||||
if err := podutil.SetInitContainersAndStatuses(pod); err != nil {
|
||||
glog.Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
switch update.Op {
|
||||
case kubetypes.ADD, kubetypes.UPDATE, kubetypes.DELETE:
|
||||
if update.Op == kubetypes.ADD {
|
||||
|
Loading…
Reference in New Issue
Block a user