@@ -936,7 +936,7 @@ func (r *SpokeReconciler) SetupWithManager(mgr ctrl.Manager) error {
936936 CreateFunc : func (_ event.CreateEvent ) bool {
937937 return false
938938 },
939- // only return true if old and new hub specs are different
939+ // only return true if old and new hub specs shared fields are different
940940 UpdateFunc : func (e event.UpdateEvent ) bool {
941941 oldHub , ok := e .ObjectOld .(* v1beta1.Hub )
942942 if ! ok {
@@ -946,7 +946,7 @@ func (r *SpokeReconciler) SetupWithManager(mgr ctrl.Manager) error {
946946 if ! ok {
947947 return false
948948 }
949- return ! reflect . DeepEqual (oldHub .Spec , newHub .Spec )
949+ return sharedFieldsChanged (oldHub .Spec . DeepCopy () , newHub .Spec . DeepCopy () )
950950 },
951951 GenericFunc : func (_ event.GenericEvent ) bool {
952952 return false
@@ -957,6 +957,14 @@ func (r *SpokeReconciler) SetupWithManager(mgr ctrl.Manager) error {
957957 Complete (r )
958958}
959959
960+ // sharedFieldsChanged checks whether the spec fields that are shared between Hub and Spokes were updated,
961+ // to prevent unnecessary reconciles of Spokes
962+ func sharedFieldsChanged (old , new * v1beta1.HubSpec ) bool {
963+ return ! reflect .DeepEqual (old .RegistrationAuth , new .RegistrationAuth ) ||
964+ ! reflect .DeepEqual (old .ClusterManager .Source , new .ClusterManager .Source ) ||
965+ old .Timeout != new .Timeout || old .LogVerbosity != new .LogVerbosity
966+ }
967+
960968func (r * SpokeReconciler ) mapHubEventToSpoke (ctx context.Context , _ client.Object ) []reconcile.Request {
961969 spokeList := & v1beta1.SpokeList {}
962970 err := r .List (ctx , spokeList )
0 commit comments