mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +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:
		@@ -427,15 +427,14 @@ func referencesDiffs(old []metav1.OwnerReference, new []metav1.OwnerReference) (
 | 
				
			|||||||
	return added, removed, changed
 | 
						return added, removed, changed
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// returns if the object in the event just transitions to "being deleted".
 | 
					func deletionStartsWithFinalizer(oldObj interface{}, newAccessor metav1.Object, matchingFinalizer string) bool {
 | 
				
			||||||
func deletionStarts(oldObj interface{}, newAccessor metav1.Object) bool {
 | 
						// if the new object isn't being deleted, or doesn't have the finalizer we're interested in, return false
 | 
				
			||||||
	// The delta_fifo may combine the creation and update of the object into one
 | 
						if !beingDeleted(newAccessor) || !hasFinalizer(newAccessor, matchingFinalizer) {
 | 
				
			||||||
	// event, so if there is no oldObj, we just return if the newObj (via
 | 
							return false
 | 
				
			||||||
	// newAccessor) is being deleted.
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// if the old object is nil, or wasn't being deleted, or didn't have the finalizer, return true
 | 
				
			||||||
	if oldObj == nil {
 | 
						if oldObj == nil {
 | 
				
			||||||
		if newAccessor.GetDeletionTimestamp() == nil {
 | 
					 | 
				
			||||||
			return false
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	oldAccessor, err := meta.Accessor(oldObj)
 | 
						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))
 | 
							utilruntime.HandleError(fmt.Errorf("cannot access oldObj: %v", err))
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return beingDeleted(newAccessor) && !beingDeleted(oldAccessor)
 | 
						return !beingDeleted(oldAccessor) || !hasFinalizer(oldAccessor, matchingFinalizer)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func beingDeleted(accessor metav1.Object) bool {
 | 
					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
 | 
					// this function takes newAccessor directly because the caller already
 | 
				
			||||||
// instantiates an accessor for the newObj.
 | 
					// instantiates an accessor for the newObj.
 | 
				
			||||||
func startsWaitingForDependentsDeleted(oldObj interface{}, newAccessor metav1.Object) bool {
 | 
					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
 | 
					// this function takes newAccessor directly because the caller already
 | 
				
			||||||
// instantiates an accessor for the newObj.
 | 
					// instantiates an accessor for the newObj.
 | 
				
			||||||
func startsWaitingForDependentsOrphaned(oldObj interface{}, newAccessor metav1.Object) bool {
 | 
					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
 | 
					// if an blocking ownerReference points to an object gets removed, or gets set to
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user