diff --git a/pkg/controllers/member/internalmembercluster/v1beta1/controller_v1beta1.go b/pkg/controllers/member/internalmembercluster/v1beta1/controller_v1beta1.go index 0e2fe679..e32459d5 100644 --- a/pkg/controllers/member/internalmembercluster/v1beta1/controller_v1beta1.go +++ b/pkg/controllers/member/internalmembercluster/v1beta1/controller_v1beta1.go @@ -10,6 +10,7 @@ import ( "fmt" "time" + clusterv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -17,9 +18,9 @@ import ( "k8s.io/apimachinery/pkg/util/rand" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/builder" "sigs.k8s.io/controller-runtime/pkg/client" - - clusterv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" + "sigs.k8s.io/controller-runtime/pkg/predicate" fleetnetv1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" fleetnetv1beta1 "go.goms.io/fleet-networking/api/v1beta1" @@ -53,26 +54,26 @@ type Reconciler struct { func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { imcKRef := klog.KRef(req.Namespace, req.Name) startTime := time.Now() - klog.V(2).InfoS("Reconciliation starts", "internalMemberCluster", imcKRef) + klog.V(2).InfoS("Reconciliation starts", "internalMemberCluster", imcKRef, "agentType", r.AgentType) defer func() { latency := time.Since(startTime).Milliseconds() - klog.V(2).InfoS("Reconciliation ends", "internalMemberCluster", imcKRef, "latency", latency) + klog.V(2).InfoS("Reconciliation ends", "internalMemberCluster", imcKRef, "latency", latency, "agentType", r.AgentType) }() var imc clusterv1beta1.InternalMemberCluster if err := r.HubClient.Get(ctx, req.NamespacedName, &imc); err != nil { if apierrors.IsNotFound(err) { - klog.V(4).InfoS("internal member cluster object is not found", "internalMemberCluster", imcKRef) + klog.V(4).InfoS("internal member cluster object is not found", "internalMemberCluster", imcKRef, "agentType", r.AgentType) return ctrl.Result{}, nil } - klog.ErrorS(err, "Failed to get internal member cluster object", "internalMemberCluster", imcKRef) + klog.ErrorS(err, "Failed to get internal member cluster object", "internalMemberCluster", imcKRef, "agentType", r.AgentType) return ctrl.Result{}, err } switch imc.Spec.State { case clusterv1beta1.ClusterStateLeave: // The member cluster is leaving the fleet. - klog.V(2).InfoS("member cluster has left the fleet; performing cleanup", "internalMemberCluster", imcKRef) + klog.V(2).InfoS("member cluster has left the fleet; performing cleanup", "internalMemberCluster", imcKRef, "agentType", r.AgentType) // Clean up fleet networking related resources. if r.AgentType == clusterv1beta1.MultiClusterServiceAgent && r.EnabledNetworkingFeatures { @@ -100,7 +101,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu requeueAfter := time.Millisecond * (time.Duration(hbInterval) + time.Duration(rand.Int63nRange(0, jitterRange)-jitterRange/2)) return ctrl.Result{RequeueAfter: requeueAfter}, nil default: - klog.ErrorS(fmt.Errorf("cluster is of an invalid state"), "internalMemberCluster", imcKRef, "clusterState", imc.Spec.State) + klog.ErrorS(fmt.Errorf("cluster is of an invalid state"), "internalMemberCluster", imcKRef, "clusterState", imc.Spec.State, "agentType", r.AgentType) } return ctrl.Result{}, nil @@ -137,12 +138,7 @@ func (r *Reconciler) updateAgentStatus(ctx context.Context, imc *clusterv1beta1. } if err := r.HubClient.Status().Update(ctx, imc); err != nil { - if apierrors.IsConflict(err) { - klog.V(2).InfoS("Failed to update internal member cluster status due to conflicts", "internalMemberCluster", klog.KObj(imc)) - return nil - } - - klog.ErrorS(err, "Failed to update internal member cluster status", "internalMemberCluster", klog.KObj(imc)) + klog.ErrorS(err, "Failed to update internal member cluster status", "internalMemberCluster", imcKObj, "agentType", r.AgentType) return err } return nil @@ -228,6 +224,6 @@ func (r *Reconciler) cleanupServiceExportRelatedResources(ctx context.Context) e // SetupWithManager sets up the controller with the Manager. func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error { return ctrl.NewControllerManagedBy(mgr). - For(&clusterv1beta1.InternalMemberCluster{}). + For(&clusterv1beta1.InternalMemberCluster{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})). Complete(r) } diff --git a/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go b/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go index d3bf7760..2f8969c9 100644 --- a/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go +++ b/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go @@ -7,6 +7,7 @@ package v1beta1 import ( "context" + "flag" "go/build" "log" "os" @@ -23,7 +24,6 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" - "sigs.k8s.io/controller-runtime/pkg/log/zap" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" clusterv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" @@ -68,8 +68,14 @@ func TestAPIs(t *testing.T) { } var _ = BeforeSuite(func() { - klog.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) + By("Setup klog") + var err error + fs := flag.NewFlagSet("klog", flag.ContinueOnError) + klog.InitFlags(fs) + Expect(fs.Parse([]string{"--v", "5", "-add_dir_header", "true"})).Should(Succeed()) + klog.InitFlags(flag.CommandLine) + flag.Parse() ctx, cancel = context.WithCancel(context.TODO()) By("bootstrap the test environment")