Unverified Commit d199bf3c authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #64846 from janetkuo/automated-cherry-pick-of-#64797-upstream-release-1.10

Automatic merge from submit-queue. Skip updating status for DaemonSet being deleted **What this PR does / why we need it**: #64313, https://github.com/kubernetes/kubernetes/pull/64797#issuecomment-395152965 **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes # **Special notes for your reviewer**: **Release note**: ```release-note Skip updating status for DaemonSet being deleted. ```
parents c2a8c9ce 44732e25
...@@ -1142,6 +1142,18 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error { ...@@ -1142,6 +1142,18 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error {
return fmt.Errorf("couldn't get key for object %#v: %v", ds, err) return fmt.Errorf("couldn't get key for object %#v: %v", ds, err)
} }
// If the DaemonSet is being deleted (either by foreground deletion or
// orphan deletion), we cannot be sure if the DaemonSet history objects
// it owned still exist -- those history objects can either be deleted
// or orphaned. Garbage collector doesn't guarantee that it will delete
// DaemonSet pods before deleting DaemonSet history objects, because
// DaemonSet history doesn't own DaemonSet pods. We cannot reliably
// calculate the status of a DaemonSet being deleted. Therefore, return
// here without updating status for the DaemonSet being deleted.
if ds.DeletionTimestamp != nil {
return nil
}
// Construct histories of the DaemonSet, and get the hash of current history // Construct histories of the DaemonSet, and get the hash of current history
cur, old, err := dsc.constructHistory(ds) cur, old, err := dsc.constructHistory(ds)
if err != nil { if err != nil {
...@@ -1149,7 +1161,7 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error { ...@@ -1149,7 +1161,7 @@ func (dsc *DaemonSetsController) syncDaemonSet(key string) error {
} }
hash := cur.Labels[apps.DefaultDaemonSetUniqueLabelKey] hash := cur.Labels[apps.DefaultDaemonSetUniqueLabelKey]
if ds.DeletionTimestamp != nil || !dsc.expectations.SatisfiedExpectations(dsKey) { if !dsc.expectations.SatisfiedExpectations(dsKey) {
// Only update status. // Only update status.
return dsc.updateDaemonSetStatus(ds, hash) return dsc.updateDaemonSetStatus(ds, hash)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment