reschedule resource bindings when reference cluster propagation policy update (#381)

Signed-off-by: lihanbo <lihanbo2@huawei.com>
This commit is contained in:
Hanbo Li 2021-05-28 09:32:07 +08:00 committed by GitHub
parent d5ab3dddcc
commit 0122d36d82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 25 deletions

View File

@ -21,6 +21,6 @@ spec:
- cluster1
spreadConstraints:
- spreadByLabel: failuredomain.kubernetes.io/zone
maximum: 3
minimum: 3
maxGroups: 3
minGroups: 3
schedulerName: default

View File

@ -199,21 +199,11 @@ func (s *Scheduler) onPropagationPolicyUpdate(old, cur interface{}) {
util.PropagationPolicyNameLabel: oldPropagationPolicy.Name,
})
referenceBindings, err := s.bindingLister.List(selector)
err := s.requeueResourceBindings(selector)
if err != nil {
klog.Errorf("Failed to list ResourceBinding by selector: %s, error: %v", selector.String(), err)
klog.Errorf("Failed to requeue ResourceBinding, error: %v", err)
return
}
for _, binding := range referenceBindings {
key, err := cache.MetaNamespaceKeyFunc(binding)
if err != nil {
klog.Errorf("couldn't get key for object %#v: %v", binding, err)
continue
}
klog.Infof("Requeue ResourceBinding(%s/%s) as placement changed.", binding.Namespace, binding.Name)
s.queue.Add(key)
}
}
func (s *Scheduler) onClusterPropagationPolicyUpdate(old, cur interface{}) {
@ -228,20 +218,14 @@ func (s *Scheduler) onClusterPropagationPolicyUpdate(old, cur interface{}) {
util.ClusterPropagationPolicyLabel: oldClusterPropagationPolicy.Name,
})
referenceClusterResourceBindings, err := s.clusterBindingLister.List(selector)
err := s.requeueClusterResourceBindings(selector)
if err != nil {
klog.Errorf("Failed to list ClusterResourceBinding by selector: %s, error: %v", selector.String(), err)
return
klog.Errorf("Failed to requeue ClusterResourceBinding, error: %v", err)
}
for _, clusterResourceBinding := range referenceClusterResourceBindings {
key, err := cache.MetaNamespaceKeyFunc(clusterResourceBinding)
if err != nil {
klog.Errorf("couldn't get key for object %#v: %v", clusterResourceBinding, err)
continue
}
klog.Infof("Requeue ClusterResourceBinding(%s) as placement changed.", clusterResourceBinding.Name)
s.queue.Add(key)
err = s.requeueResourceBindings(selector)
if err != nil {
klog.Errorf("Failed to requeue ResourceBinding, error: %v", err)
}
}
@ -250,6 +234,46 @@ func (s *Scheduler) worker() {
}
}
// requeueResourceBindings will retrieve all ResourceBinding objects by the label selector and put them to queue.
func (s *Scheduler) requeueResourceBindings(selector labels.Selector) error {
referenceBindings, err := s.bindingLister.List(selector)
if err != nil {
klog.Errorf("Failed to list ResourceBinding by selector: %s, error: %v", selector.String(), err)
return err
}
for _, binding := range referenceBindings {
key, err := cache.MetaNamespaceKeyFunc(binding)
if err != nil {
klog.Errorf("couldn't get key for ResourceBinding(%s/%s): %v", binding.Namespace, binding.Name, err)
continue
}
klog.Infof("Requeue ResourceBinding(%s/%s) as placement changed.", binding.Namespace, binding.Name)
s.queue.Add(key)
}
return nil
}
// requeueClusterResourceBindings will retrieve all ClusterResourceBinding objects by the label selector and put them to queue.
func (s *Scheduler) requeueClusterResourceBindings(selector labels.Selector) error {
referenceClusterResourceBindings, err := s.clusterBindingLister.List(selector)
if err != nil {
klog.Errorf("Failed to list ClusterResourceBinding by selector: %s, error: %v", selector.String(), err)
return err
}
for _, clusterResourceBinding := range referenceClusterResourceBindings {
key, err := cache.MetaNamespaceKeyFunc(clusterResourceBinding)
if err != nil {
klog.Errorf("couldn't get key for ClusterResourceBinding(%s): %v", clusterResourceBinding.Name, err)
continue
}
klog.Infof("Requeue ClusterResourceBinding(%s) as placement changed.", clusterResourceBinding.Name)
s.queue.Add(key)
}
return nil
}
func (s *Scheduler) getPlacement(resourceBinding *workv1alpha1.ResourceBinding) (policyv1alpha1.Placement, string, error) {
var placement policyv1alpha1.Placement
var clusterPolicyName string