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