diff --git a/pkg/kubelet/config/config.go b/pkg/kubelet/config/config.go index 0ecd6bbf5d2..ed7869dfb01 100644 --- a/pkg/kubelet/config/config.go +++ b/pkg/kubelet/config/config.go @@ -491,12 +491,7 @@ func (s *podStorage) MergedState() interface{} { pods := make([]*v1.Pod, 0) for _, sourcePods := range s.pods { for _, podRef := range sourcePods { - pod, err := api.Scheme.Copy(podRef) - if err != nil { - glog.Errorf("unable to copy pod: %v", err) - continue - } - pods = append(pods, pod.(*v1.Pod)) + pods = append(pods, podRef.DeepCopy()) } } return pods @@ -506,12 +501,7 @@ func copyPods(sourcePods []*v1.Pod) []*v1.Pod { pods := []*v1.Pod{} for _, source := range sourcePods { // Use a deep copy here just in case - pod, err := api.Scheme.Copy(source) - if err != nil { - glog.Errorf("unable to copy pod: %v", err) - continue - } - pods = append(pods, pod.(*v1.Pod)) + pods = append(pods, source.DeepCopy()) } return pods } diff --git a/pkg/kubelet/kubelet_resources.go b/pkg/kubelet/kubelet_resources.go index 15e4d9ac238..e8f5525e8b0 100644 --- a/pkg/kubelet/kubelet_resources.go +++ b/pkg/kubelet/kubelet_resources.go @@ -44,14 +44,7 @@ func (kl *Kubelet) defaultPodLimitsForDownwardAPI(pod *v1.Pod, container *v1.Con } allocatable := node.Status.Allocatable glog.Infof("allocatable: %v", allocatable) - podCopy, err := scheme.Scheme.Copy(pod) - if err != nil { - return nil, nil, fmt.Errorf("failed to perform a deep copy of pod object: %v", err) - } - outputPod, ok := podCopy.(*v1.Pod) - if !ok { - return nil, nil, fmt.Errorf("unexpected type returned from deep copy of pod object") - } + outputPod := pod.DeepCopy() for idx := range outputPod.Spec.Containers { resource.MergeContainerResourceLimits(&outputPod.Spec.Containers[idx], allocatable) } @@ -62,6 +55,7 @@ func (kl *Kubelet) defaultPodLimitsForDownwardAPI(pod *v1.Pod, container *v1.Con if err != nil { return nil, nil, fmt.Errorf("failed to perform a deep copy of container object: %v", err) } + var ok bool outputContainer, ok = containerCopy.(*v1.Container) if !ok { return nil, nil, fmt.Errorf("unexpected type returned from deep copy of container object") diff --git a/pkg/kubemark/controller.go b/pkg/kubemark/controller.go index 48fafcc0f54..aa7482ea3be 100644 --- a/pkg/kubemark/controller.go +++ b/pkg/kubemark/controller.go @@ -31,7 +31,6 @@ import ( kubeclient "k8s.io/client-go/kubernetes" listersv1 "k8s.io/client-go/listers/core/v1" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -221,15 +220,12 @@ func (kubemarkController *KubemarkController) GetNodeGroupForNode(node string) ( } func (kubemarkController *KubemarkController) addNodeToNodeGroup(nodeGroup string) error { - templateCopy, err := api.Scheme.Copy(kubemarkController.nodeTemplate) - if err != nil { - return err - } - node := templateCopy.(*apiv1.ReplicationController) + node := kubemarkController.nodeTemplate.DeepCopy() node.Name = fmt.Sprintf("%s-%d", nodeGroup, kubemarkController.rand.Int63()) node.Labels = map[string]string{nodeGroupLabel: nodeGroup, "name": node.Name} node.Spec.Template.Labels = node.Labels + var err error for i := 0; i < numRetries; i++ { _, err = kubemarkController.externalCluster.client.CoreV1().ReplicationControllers(node.Namespace).Create(node) if err == nil { diff --git a/pkg/registry/rbac/helpers.go b/pkg/registry/rbac/helpers.go index 011d12ea053..ca0b7188569 100644 --- a/pkg/registry/rbac/helpers.go +++ b/pkg/registry/rbac/helpers.go @@ -20,18 +20,13 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" - kapi "k8s.io/kubernetes/pkg/api" ) // IsOnlyMutatingGCFields checks finalizers and ownerrefs which GC manipulates // and indicates that only those fields are changing func IsOnlyMutatingGCFields(obj, old runtime.Object, equalities conversion.Equalities) bool { // make a copy of the newObj so that we can stomp for comparison - copied, err := kapi.Scheme.Copy(obj) - if err != nil { - // if we couldn't copy, don't fail, just make it do the check - return false - } + copied := obj.DeepCopyObject() copiedMeta, err := meta.Accessor(copied) if err != nil { return false diff --git a/staging/src/k8s.io/apimachinery/pkg/runtime/scheme.go b/staging/src/k8s.io/apimachinery/pkg/runtime/scheme.go index c3d4b7f5f8e..abfe6f53941 100644 --- a/staging/src/k8s.io/apimachinery/pkg/runtime/scheme.go +++ b/staging/src/k8s.io/apimachinery/pkg/runtime/scheme.go @@ -420,15 +420,6 @@ func (s *Scheme) Default(src Object) { } } -// Copy does a deep copy of an API object. -func (s *Scheme) Copy(src Object) (Object, error) { - dst, err := s.DeepCopy(src) - if err != nil { - return nil, err - } - return dst.(Object), nil -} - // Performs a deep copy of the given object. func (s *Scheme) DeepCopy(src interface{}) (interface{}, error) { return s.cloner.DeepCopy(src) diff --git a/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go b/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go index 74ad84dd95e..37e9d8058de 100644 --- a/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go +++ b/staging/src/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go @@ -123,12 +123,7 @@ func (c *codec) Decode(data []byte, defaultGVK *schema.GroupVersionKind, into ru if c.defaulter != nil { // create a copy to ensure defaulting is not applied to the original versioned objects if isVersioned { - copied, err := c.copier.Copy(obj) - if err != nil { - utilruntime.HandleError(err) - copied = obj - } - versioned.Objects = []runtime.Object{copied} + versioned.Objects = []runtime.Object{obj.DeepCopyObject()} } c.defaulter.Default(obj) } else { @@ -151,12 +146,7 @@ func (c *codec) Decode(data []byte, defaultGVK *schema.GroupVersionKind, into ru // Convert if needed. if isVersioned { // create a copy, because ConvertToVersion does not guarantee non-mutation of objects - copied, err := c.copier.Copy(obj) - if err != nil { - utilruntime.HandleError(err) - copied = obj - } - versioned.Objects = []runtime.Object{copied} + versioned.Objects = []runtime.Object{obj.DeepCopyObject()} } // perform defaulting if requested