Skip to content

Commit 42ff0d8

Browse files
authored
Merge pull request kubernetes#75972 from smarterclayton/use_patch
Garbage collector should use a merge patch instead of Update
2 parents a3ae6c4 + a63fef2 commit 42ff0d8

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

pkg/controller/garbagecollector/operations.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package garbagecollector
1818

1919
import (
20+
"encoding/json"
2021
"fmt"
2122

2223
"k8s.io/apimachinery/pkg/api/errors"
@@ -67,14 +68,6 @@ func (gc *GarbageCollector) getObject(item objectReference) (*unstructured.Unstr
6768
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Get(item.Name, metav1.GetOptions{})
6869
}
6970

70-
func (gc *GarbageCollector) updateObject(item objectReference, obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
71-
resource, namespaced, err := gc.apiResource(item.APIVersion, item.Kind)
72-
if err != nil {
73-
return nil, err
74-
}
75-
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Update(obj, metav1.UpdateOptions{})
76-
}
77-
7871
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt types.PatchType) (*unstructured.Unstructured, error) {
7972
resource, namespaced, err := gc.apiResource(item.APIVersion, item.Kind)
8073
if err != nil {
@@ -83,8 +76,6 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt t
8376
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.PatchOptions{})
8477
}
8578

86-
// TODO: Using Patch when strategicmerge supports deleting an entry from a
87-
// slice of a base type.
8879
func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) error {
8980
err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
9081
ownerObject, err := gc.getObject(owner.identity)
@@ -112,9 +103,18 @@ func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string)
112103
klog.V(5).Infof("the %s finalizer is already removed from object %s", targetFinalizer, owner.identity)
113104
return nil
114105
}
106+
115107
// remove the owner from dependent's OwnerReferences
116-
ownerObject.SetFinalizers(newFinalizers)
117-
_, err = gc.updateObject(owner.identity, ownerObject)
108+
patch, err := json.Marshal(map[string]interface{}{
109+
"metadata": map[string]interface{}{
110+
"resourceVersion": accessor.GetResourceVersion(),
111+
"finalizers": newFinalizers,
112+
},
113+
})
114+
if err != nil {
115+
return fmt.Errorf("unable to finalize %s due to an error serializing patch: %v", owner.identity, err)
116+
}
117+
_, err = gc.patchObject(owner.identity, patch, types.MergePatchType)
118118
return err
119119
})
120120
if errors.IsConflict(err) {

0 commit comments

Comments
 (0)