feat: ignore reconcile the mcs triggered by svc if the mcs is not CrossCluster

Signed-off-by: jwcesign <jwcesign@gmail.com>
This commit is contained in:
jwcesign 2023-12-19 15:21:54 +08:00
parent 515594592b
commit 3f6431dae2
1 changed files with 26 additions and 6 deletions

View File

@ -351,7 +351,7 @@ func (c *MCSController) retrieveService(mcs *networkingv1alpha1.MultiClusterServ
delete(svcCopy.Labels, networkingv1alpha1.MultiClusterServicePermanentIDLabel)
}
if err = c.Client.Update(context.Background(), svc); err != nil {
if err = c.Client.Update(context.Background(), svcCopy); err != nil {
klog.Errorf("Failed to update service(%s/%s):%v", mcs.Namespace, mcs.Name, err)
return err
}
@ -580,7 +580,9 @@ func (c *MCSController) SetupWithManager(mgr controllerruntime.Manager) error {
svcPredicateFunc := predicate.Funcs{
CreateFunc: func(e event.CreateEvent) bool {
return true
svc := e.Object.(*corev1.Service)
return c.serviceHasCrossClusterMultiClusterService(svc)
},
UpdateFunc: func(e event.UpdateEvent) bool {
svcOld := e.ObjectOld.(*corev1.Service)
@ -592,13 +594,14 @@ func (c *MCSController) SetupWithManager(mgr controllerruntime.Manager) error {
equality.Semantic.DeepEqual(svcOld.Spec, svcNew.Spec) {
return false
}
return true
return c.serviceHasCrossClusterMultiClusterService(svcNew)
},
DeleteFunc: func(event.DeleteEvent) bool {
return true
DeleteFunc: func(e event.DeleteEvent) bool {
svc := e.Object.(*corev1.Service)
return c.serviceHasCrossClusterMultiClusterService(svc)
},
GenericFunc: func(event.GenericEvent) bool {
return true
return false
},
}
@ -620,6 +623,19 @@ func (c *MCSController) SetupWithManager(mgr controllerruntime.Manager) error {
Complete(c)
}
func (c *MCSController) serviceHasCrossClusterMultiClusterService(svc *corev1.Service) bool {
mcs := &networkingv1alpha1.MultiClusterService{}
if err := c.Client.Get(context.Background(),
types.NamespacedName{Namespace: svc.Namespace, Name: svc.Name}, mcs); err != nil {
if !apierrors.IsNotFound(err) {
klog.Errorf("Failed to get MultiClusterService(%s/%s):%v", svc.Namespace, svc.Name, err)
}
return false
}
return helper.MultiClusterServiceCrossClusterEnabled(mcs)
}
func (c *MCSController) clusterMapFunc() handler.MapFunc {
return func(ctx context.Context, a client.Object) []reconcile.Request {
var clusterName string
@ -652,6 +668,10 @@ func (c *MCSController) clusterMapFunc() handler.MapFunc {
}
func (c *MCSController) needSyncMultiClusterService(mcs *networkingv1alpha1.MultiClusterService, clusterName string) (bool, error) {
if !helper.MultiClusterServiceCrossClusterEnabled(mcs) {
return false, nil
}
if len(mcs.Spec.ProviderClusters) == 0 || len(mcs.Spec.ConsumerClusters) == 0 {
return true, nil
}