diff --git a/pkg/dependenciesdistributor/dependencies_distributor.go b/pkg/dependenciesdistributor/dependencies_distributor.go index 92d54f9f5..fc15d9a5b 100644 --- a/pkg/dependenciesdistributor/dependencies_distributor.go +++ b/pkg/dependenciesdistributor/dependencies_distributor.go @@ -36,6 +36,7 @@ import ( "github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/eventfilter" "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/fedinformer/keys" @@ -93,7 +94,24 @@ func (d *DependenciesDistributor) OnAdd(obj interface{}) { } // OnUpdate handles object update event and push the object to queue. -func (d *DependenciesDistributor) OnUpdate(_, newObj interface{}) { +func (d *DependenciesDistributor) OnUpdate(oldObj, newObj interface{}) { + unstructuredOldObj, err := helper.ToUnstructured(oldObj) + if err != nil { + klog.Errorf("Failed to transform oldObj, error: %v", err) + return + } + + unstructuredNewObj, err := helper.ToUnstructured(newObj) + if err != nil { + klog.Errorf("Failed to transform newObj, error: %v", err) + return + } + + if !eventfilter.SpecificationChanged(unstructuredOldObj, unstructuredNewObj) { + klog.V(4).Infof("Ignore update event of object (%s, kind=%s, %s) as specification no change", unstructuredOldObj.GetAPIVersion(), unstructuredOldObj.GetKind(), names.NamespacedKey(unstructuredOldObj.GetNamespace(), unstructuredOldObj.GetName())) + return + } + d.OnAdd(newObj) } diff --git a/pkg/detector/detector.go b/pkg/detector/detector.go index 9730579fa..27ae9f9a1 100644 --- a/pkg/detector/detector.go +++ b/pkg/detector/detector.go @@ -35,6 +35,7 @@ import ( "github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag" "github.com/karmada-io/karmada/pkg/util" + "github.com/karmada-io/karmada/pkg/util/eventfilter" "github.com/karmada-io/karmada/pkg/util/fedinformer" "github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager" "github.com/karmada-io/karmada/pkg/util/fedinformer/keys" @@ -303,7 +304,7 @@ func (d *ResourceDetector) OnUpdate(oldObj, newObj interface{}) { return } - if !SpecificationChanged(unstructuredOldObj, unstructuredNewObj) { + if !eventfilter.SpecificationChanged(unstructuredOldObj, unstructuredNewObj) { klog.V(4).Infof("Ignore update event of object (kind=%s, %s/%s) as specification no change", unstructuredOldObj.GetKind(), unstructuredOldObj.GetNamespace(), unstructuredOldObj.GetName()) return } diff --git a/pkg/detector/eventfilter.go b/pkg/util/eventfilter/eventfilter.go similarity index 97% rename from pkg/detector/eventfilter.go rename to pkg/util/eventfilter/eventfilter.go index d3241d73f..0e62ddec4 100644 --- a/pkg/detector/eventfilter.go +++ b/pkg/util/eventfilter/eventfilter.go @@ -1,4 +1,4 @@ -package detector +package eventfilter import ( "reflect" diff --git a/pkg/detector/eventfilter_test.go b/pkg/util/eventfilter/eventfilter_test.go similarity index 95% rename from pkg/detector/eventfilter_test.go rename to pkg/util/eventfilter/eventfilter_test.go index 657dad8c9..0d894db47 100644 --- a/pkg/detector/eventfilter_test.go +++ b/pkg/util/eventfilter/eventfilter_test.go @@ -1,10 +1,10 @@ -package detector +package eventfilter import ( "testing" appsv1 "k8s.io/api/apps/v1" - v1 "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/klog/v2" "k8s.io/utils/pointer" @@ -105,7 +105,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(3), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3}, @@ -117,7 +117,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(5), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3}, @@ -133,7 +133,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(3), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1}, @@ -145,7 +145,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(3), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3}, @@ -161,7 +161,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(3), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1}, @@ -173,7 +173,7 @@ func TestSpecificationChanged(t *testing.T) { }, Spec: workloadv1alpha1.WorkloadSpec{ Replicas: pointer.Int32(5), - Template: v1.PodTemplateSpec{}, + Template: corev1.PodTemplateSpec{}, Paused: false, }, Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},