mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Merge pull request #75972 from smarterclayton/use_patch
Garbage collector should use a merge patch instead of Update
This commit is contained in:
commit
42ff0d8517
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package garbagecollector
|
package garbagecollector
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -67,14 +68,6 @@ func (gc *GarbageCollector) getObject(item objectReference) (*unstructured.Unstr
|
|||||||
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Get(item.Name, metav1.GetOptions{})
|
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Get(item.Name, metav1.GetOptions{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gc *GarbageCollector) updateObject(item objectReference, obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
|
|
||||||
resource, namespaced, err := gc.apiResource(item.APIVersion, item.Kind)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Update(obj, metav1.UpdateOptions{})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt types.PatchType) (*unstructured.Unstructured, error) {
|
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt types.PatchType) (*unstructured.Unstructured, error) {
|
||||||
resource, namespaced, err := gc.apiResource(item.APIVersion, item.Kind)
|
resource, namespaced, err := gc.apiResource(item.APIVersion, item.Kind)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -83,8 +76,6 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt t
|
|||||||
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.PatchOptions{})
|
return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.PatchOptions{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Using Patch when strategicmerge supports deleting an entry from a
|
|
||||||
// slice of a base type.
|
|
||||||
func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) error {
|
func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) error {
|
||||||
err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
|
err := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
|
||||||
ownerObject, err := gc.getObject(owner.identity)
|
ownerObject, err := gc.getObject(owner.identity)
|
||||||
@ -112,9 +103,18 @@ func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string)
|
|||||||
klog.V(5).Infof("the %s finalizer is already removed from object %s", targetFinalizer, owner.identity)
|
klog.V(5).Infof("the %s finalizer is already removed from object %s", targetFinalizer, owner.identity)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove the owner from dependent's OwnerReferences
|
// remove the owner from dependent's OwnerReferences
|
||||||
ownerObject.SetFinalizers(newFinalizers)
|
patch, err := json.Marshal(map[string]interface{}{
|
||||||
_, err = gc.updateObject(owner.identity, ownerObject)
|
"metadata": map[string]interface{}{
|
||||||
|
"resourceVersion": accessor.GetResourceVersion(),
|
||||||
|
"finalizers": newFinalizers,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to finalize %s due to an error serializing patch: %v", owner.identity, err)
|
||||||
|
}
|
||||||
|
_, err = gc.patchObject(owner.identity, patch, types.MergePatchType)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
if errors.IsConflict(err) {
|
if errors.IsConflict(err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user