diff --git a/pkg/controller/statefulset/BUILD b/pkg/controller/statefulset/BUILD index 011c91b0742..bfb3e41ab65 100644 --- a/pkg/controller/statefulset/BUILD +++ b/pkg/controller/statefulset/BUILD @@ -19,6 +19,7 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1/pod:go_default_library", "//pkg/client/retry:go_default_library", "//pkg/controller:go_default_library", diff --git a/pkg/controller/statefulset/stateful_set.go b/pkg/controller/statefulset/stateful_set.go index 2163fd94f3e..e5c2be07f90 100644 --- a/pkg/controller/statefulset/stateful_set.go +++ b/pkg/controller/statefulset/stateful_set.go @@ -39,6 +39,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/history" @@ -450,7 +451,12 @@ func (ssc *StatefulSetController) sync(key string) error { // syncStatefulSet syncs a tuple of (statefulset, []*v1.Pod). func (ssc *StatefulSetController) syncStatefulSet(set *apps.StatefulSet, pods []*v1.Pod) error { glog.V(4).Infof("Syncing StatefulSet %v/%v with %d pods", set.Namespace, set.Name, len(pods)) - if err := ssc.control.UpdateStatefulSet(set, pods); err != nil { + // TODO: investigate where we mutate the set during the update as it is not obvious. + setCopy, err := api.Scheme.DeepCopy(set) + if err != nil { + return err + } + if err := ssc.control.UpdateStatefulSet(setCopy.(*apps.StatefulSet), pods); err != nil { return err } glog.V(4).Infof("Successfully synced StatefulSet %s/%s successful", set.Namespace, set.Name)