mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 06:54:01 +00:00
changes the way gc
detect that an object needs to be deleted
before this change, an object would be added to `attemptToDelete` queue only if `gc` detected the transition, simply by check if `deletionTimestamp` was set. After the change, it will check if `foregroundDeletion` finalizer has been set before adding the item to the queue.
This commit is contained in:
parent
564eff757c
commit
2d81cee900
@ -427,15 +427,14 @@ func referencesDiffs(old []metav1.OwnerReference, new []metav1.OwnerReference) (
|
||||
return added, removed, changed
|
||||
}
|
||||
|
||||
// returns if the object in the event just transitions to "being deleted".
|
||||
func deletionStarts(oldObj interface{}, newAccessor metav1.Object) bool {
|
||||
// The delta_fifo may combine the creation and update of the object into one
|
||||
// event, so if there is no oldObj, we just return if the newObj (via
|
||||
// newAccessor) is being deleted.
|
||||
func deletionStartsWithFinalizer(oldObj interface{}, newAccessor metav1.Object, matchingFinalizer string) bool {
|
||||
// if the new object isn't being deleted, or doesn't have the finalizer we're interested in, return false
|
||||
if !beingDeleted(newAccessor) || !hasFinalizer(newAccessor, matchingFinalizer) {
|
||||
return false
|
||||
}
|
||||
|
||||
// if the old object is nil, or wasn't being deleted, or didn't have the finalizer, return true
|
||||
if oldObj == nil {
|
||||
if newAccessor.GetDeletionTimestamp() == nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
oldAccessor, err := meta.Accessor(oldObj)
|
||||
@ -443,7 +442,7 @@ func deletionStarts(oldObj interface{}, newAccessor metav1.Object) bool {
|
||||
utilruntime.HandleError(fmt.Errorf("cannot access oldObj: %v", err))
|
||||
return false
|
||||
}
|
||||
return beingDeleted(newAccessor) && !beingDeleted(oldAccessor)
|
||||
return !beingDeleted(oldAccessor) || !hasFinalizer(oldAccessor, matchingFinalizer)
|
||||
}
|
||||
|
||||
func beingDeleted(accessor metav1.Object) bool {
|
||||
@ -471,13 +470,13 @@ func hasFinalizer(accessor metav1.Object, matchingFinalizer string) bool {
|
||||
// this function takes newAccessor directly because the caller already
|
||||
// instantiates an accessor for the newObj.
|
||||
func startsWaitingForDependentsDeleted(oldObj interface{}, newAccessor metav1.Object) bool {
|
||||
return deletionStarts(oldObj, newAccessor) && hasDeleteDependentsFinalizer(newAccessor)
|
||||
return deletionStartsWithFinalizer(oldObj, newAccessor, metav1.FinalizerDeleteDependents)
|
||||
}
|
||||
|
||||
// this function takes newAccessor directly because the caller already
|
||||
// instantiates an accessor for the newObj.
|
||||
func startsWaitingForDependentsOrphaned(oldObj interface{}, newAccessor metav1.Object) bool {
|
||||
return deletionStarts(oldObj, newAccessor) && hasOrphanFinalizer(newAccessor)
|
||||
return deletionStartsWithFinalizer(oldObj, newAccessor, metav1.FinalizerOrphanDependents)
|
||||
}
|
||||
|
||||
// if an blocking ownerReference points to an object gets removed, or gets set to
|
||||
|
Loading…
Reference in New Issue
Block a user