From ed423054ba0089a6d58fb0e048fe1acfd966f0d7 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Tue, 15 Aug 2017 14:15:58 +0200 Subject: [PATCH] client-go: simplify deepcopy calls --- staging/src/k8s.io/client-go/testing/fixture.go | 16 +++------------- staging/src/k8s.io/client-go/tools/cache/BUILD | 2 -- .../k8s.io/client-go/tools/cache/index_test.go | 7 +------ .../client-go/tools/cache/mutation_detector.go | 16 +++++----------- .../k8s.io/client-go/tools/cache/testing/BUILD | 1 - .../cache/testing/fake_controller_source.go | 13 ++----------- 6 files changed, 11 insertions(+), 44 deletions(-) diff --git a/staging/src/k8s.io/client-go/testing/fixture.go b/staging/src/k8s.io/client-go/testing/fixture.go index a53c960c23..9c7bc45da8 100644 --- a/staging/src/k8s.io/client-go/testing/fixture.go +++ b/staging/src/k8s.io/client-go/testing/fixture.go @@ -183,10 +183,7 @@ func (t *tracker) List(gvr schema.GroupVersionResource, gvk schema.GroupVersionK if err := meta.SetList(list, matchingObjs); err != nil { return nil, err } - if list, err = t.scheme.Copy(list); err != nil { - return nil, err - } - return list, nil + return list.DeepCopyObject(), nil } func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime.Object, error) { @@ -214,11 +211,7 @@ func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime // Only one object should match in the tracker if it works // correctly, as Add/Update methods enforce kind/namespace/name // uniqueness. - obj, err := t.scheme.Copy(matchingObjs[0]) - if err != nil { - return nil, err - } - + obj := matchingObjs[0].DeepCopyObject() if status, ok := obj.(*metav1.Status); ok { if status.Status != metav1.StatusSuccess { return nil, &errors.StatusError{ErrStatus: *status} @@ -280,10 +273,7 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st // To avoid the object from being accidentally modified by caller // after it's been added to the tracker, we always store the deep // copy. - obj, err := t.scheme.Copy(obj) - if err != nil { - return err - } + obj = obj.DeepCopyObject() newMeta, err := meta.Accessor(obj) if err != nil { diff --git a/staging/src/k8s.io/client-go/tools/cache/BUILD b/staging/src/k8s.io/client-go/tools/cache/BUILD index e79cce629c..bc7e709478 100644 --- a/staging/src/k8s.io/client-go/tools/cache/BUILD +++ b/staging/src/k8s.io/client-go/tools/cache/BUILD @@ -33,7 +33,6 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/tools/cache/testing:go_default_library", ], ) @@ -77,7 +76,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/tools/cache/index_test.go b/staging/src/k8s.io/client-go/tools/cache/index_test.go index d5615e6dfa..7e37850811 100644 --- a/staging/src/k8s.io/client-go/tools/cache/index_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/index_test.go @@ -22,7 +22,6 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes/scheme" ) func testIndexFunc(obj interface{}) ([]string, error) { @@ -119,11 +118,7 @@ func TestMultiIndexKeys(t *testing.T) { t.Errorf("Expected 0 pods but got %v", len(elmoPods)) } - obj, err := scheme.Scheme.DeepCopy(pod2) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - copyOfPod2 := obj.(*v1.Pod) + copyOfPod2 := pod2.DeepCopy() copyOfPod2.Annotations["users"] = "oscar" index.Update(copyOfPod2) bertPods, err = index.ByIndex("byUser", "bert") diff --git a/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go b/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go index 8c067cab90..8e6338a1ba 100644 --- a/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go +++ b/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go @@ -26,7 +26,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/client-go/kubernetes/scheme" ) var mutationDetectionEnabled = false @@ -96,18 +95,13 @@ func (d *defaultCacheMutationDetector) AddObject(obj interface{}) { if _, ok := obj.(DeletedFinalStateUnknown); ok { return } - if _, ok := obj.(runtime.Object); !ok { - return - } + if obj, ok := obj.(runtime.Object); ok { + copiedObj := obj.DeepCopyObject() - copiedObj, err := scheme.Scheme.Copy(obj.(runtime.Object)) - if err != nil { - return + d.lock.Lock() + defer d.lock.Unlock() + d.cachedObjs = append(d.cachedObjs, cacheObj{cached: obj, copied: copiedObj}) } - - d.lock.Lock() - defer d.lock.Unlock() - d.cachedObjs = append(d.cachedObjs, cacheObj{cached: obj, copied: copiedObj}) } func (d *defaultCacheMutationDetector) CompareObjects() { diff --git a/staging/src/k8s.io/client-go/tools/cache/testing/BUILD b/staging/src/k8s.io/client-go/tools/cache/testing/BUILD index 0372461300..4bb01c98a5 100644 --- a/staging/src/k8s.io/client-go/tools/cache/testing/BUILD +++ b/staging/src/k8s.io/client-go/tools/cache/testing/BUILD @@ -27,7 +27,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/tools/cache/testing/fake_controller_source.go b/staging/src/k8s.io/client-go/tools/cache/testing/fake_controller_source.go index 9d462c3d60..24362801b8 100644 --- a/staging/src/k8s.io/client-go/tools/cache/testing/fake_controller_source.go +++ b/staging/src/k8s.io/client-go/tools/cache/testing/fake_controller_source.go @@ -28,7 +28,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/kubernetes/scheme" ) func NewFakeControllerSource() *FakeControllerSource { @@ -153,11 +152,7 @@ func (f *FakeControllerSource) getListItemsLocked() ([]runtime.Object, error) { // Otherwise, if they make a change and write it back, they // will inadvertently change our canonical copy (in // addition to racing with other clients). - objCopy, err := scheme.Scheme.DeepCopy(obj) - if err != nil { - return nil, err - } - list = append(list, objCopy.(runtime.Object)) + list = append(list, obj.DeepCopyObject()) } return list, nil } @@ -242,11 +237,7 @@ func (f *FakeControllerSource) Watch(options metav1.ListOptions) (watch.Interfac // it back, they will inadvertently change the our // canonical copy (in addition to racing with other // clients). - objCopy, err := scheme.Scheme.DeepCopy(c.Object) - if err != nil { - return nil, err - } - changes = append(changes, watch.Event{Type: c.Type, Object: objCopy.(runtime.Object)}) + changes = append(changes, watch.Event{Type: c.Type, Object: c.Object.DeepCopyObject()}) } return f.Broadcaster.WatchWithPrefix(changes), nil } else if rc > len(f.changes) {