mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
controller: adopt pods only when controller is not deleted
This commit is contained in:
parent
59c313730c
commit
ec2c79a35e
@ -577,15 +577,6 @@ func (rsc *ReplicaSetController) syncReplicaSet(key string) error {
|
|||||||
}
|
}
|
||||||
rs := *obj.(*extensions.ReplicaSet)
|
rs := *obj.(*extensions.ReplicaSet)
|
||||||
|
|
||||||
// Check the expectations of the ReplicaSet before counting active pods, otherwise a new pod can sneak
|
|
||||||
// in and update the expectations after we've retrieved active pods from the store. If a new pod enters
|
|
||||||
// the store after we've checked the expectation, the ReplicaSet sync is just deferred till the next
|
|
||||||
// relist.
|
|
||||||
if err != nil {
|
|
||||||
utilruntime.HandleError(fmt.Errorf("Couldn't get key for ReplicaSet %#v: %v", rs, err))
|
|
||||||
// Explicitly return nil to avoid re-enqueue bad key
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
rsNeedsSync := rsc.expectations.SatisfiedExpectations(key)
|
rsNeedsSync := rsc.expectations.SatisfiedExpectations(key)
|
||||||
selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
|
selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -606,6 +597,8 @@ func (rsc *ReplicaSetController) syncReplicaSet(key string) error {
|
|||||||
}
|
}
|
||||||
cm := controller.NewPodControllerRefManager(rsc.podControl, rs.ObjectMeta, selector, getRSKind())
|
cm := controller.NewPodControllerRefManager(rsc.podControl, rs.ObjectMeta, selector, getRSKind())
|
||||||
matchesAndControlled, matchesNeedsController, controlledDoesNotMatch := cm.Classify(pods)
|
matchesAndControlled, matchesNeedsController, controlledDoesNotMatch := cm.Classify(pods)
|
||||||
|
// Adopt pods only if this replica set is not going to be deleted.
|
||||||
|
if rs.DeletionTimestamp == nil {
|
||||||
for _, pod := range matchesNeedsController {
|
for _, pod := range matchesNeedsController {
|
||||||
err := cm.AdoptPod(pod)
|
err := cm.AdoptPod(pod)
|
||||||
// continue to next pod if adoption fails.
|
// continue to next pod if adoption fails.
|
||||||
@ -618,6 +611,7 @@ func (rsc *ReplicaSetController) syncReplicaSet(key string) error {
|
|||||||
matchesAndControlled = append(matchesAndControlled, pod)
|
matchesAndControlled = append(matchesAndControlled, pod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
filteredPods = matchesAndControlled
|
filteredPods = matchesAndControlled
|
||||||
// remove the controllerRef for the pods that no longer have matching labels
|
// remove the controllerRef for the pods that no longer have matching labels
|
||||||
var errlist []error
|
var errlist []error
|
||||||
|
@ -666,16 +666,8 @@ func (rm *ReplicationManager) syncReplicationController(key string) error {
|
|||||||
}
|
}
|
||||||
rc := *obj.(*v1.ReplicationController)
|
rc := *obj.(*v1.ReplicationController)
|
||||||
|
|
||||||
// Check the expectations of the rc before counting active pods, otherwise a new pod can sneak in
|
|
||||||
// and update the expectations after we've retrieved active pods from the store. If a new pod enters
|
|
||||||
// the store after we've checked the expectation, the rc sync is just deferred till the next relist.
|
|
||||||
rcKey, err := controller.KeyFunc(&rc)
|
|
||||||
if err != nil {
|
|
||||||
glog.Errorf("Couldn't get key for replication controller %#v: %v", rc, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
trace.Step("ReplicationController restored")
|
trace.Step("ReplicationController restored")
|
||||||
rcNeedsSync := rm.expectations.SatisfiedExpectations(rcKey)
|
rcNeedsSync := rm.expectations.SatisfiedExpectations(key)
|
||||||
trace.Step("Expectations restored")
|
trace.Step("Expectations restored")
|
||||||
|
|
||||||
// NOTE: filteredPods are pointing to objects from cache - if you need to
|
// NOTE: filteredPods are pointing to objects from cache - if you need to
|
||||||
@ -693,6 +685,8 @@ func (rm *ReplicationManager) syncReplicationController(key string) error {
|
|||||||
}
|
}
|
||||||
cm := controller.NewPodControllerRefManager(rm.podControl, rc.ObjectMeta, labels.Set(rc.Spec.Selector).AsSelectorPreValidated(), getRCKind())
|
cm := controller.NewPodControllerRefManager(rm.podControl, rc.ObjectMeta, labels.Set(rc.Spec.Selector).AsSelectorPreValidated(), getRCKind())
|
||||||
matchesAndControlled, matchesNeedsController, controlledDoesNotMatch := cm.Classify(pods)
|
matchesAndControlled, matchesNeedsController, controlledDoesNotMatch := cm.Classify(pods)
|
||||||
|
// Adopt pods only if this replication controller is not going to be deleted.
|
||||||
|
if rc.DeletionTimestamp == nil {
|
||||||
for _, pod := range matchesNeedsController {
|
for _, pod := range matchesNeedsController {
|
||||||
err := cm.AdoptPod(pod)
|
err := cm.AdoptPod(pod)
|
||||||
// continue to next pod if adoption fails.
|
// continue to next pod if adoption fails.
|
||||||
@ -705,6 +699,7 @@ func (rm *ReplicationManager) syncReplicationController(key string) error {
|
|||||||
matchesAndControlled = append(matchesAndControlled, pod)
|
matchesAndControlled = append(matchesAndControlled, pod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
filteredPods = matchesAndControlled
|
filteredPods = matchesAndControlled
|
||||||
// remove the controllerRef for the pods that no longer have matching labels
|
// remove the controllerRef for the pods that no longer have matching labels
|
||||||
var errlist []error
|
var errlist []error
|
||||||
|
Loading…
Reference in New Issue
Block a user