fix: fix dependent resources being created and deleted repeatedly when the dependent resource has a status field.
Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>
This commit is contained in:
parent
a2dc2e8bbb
commit
1f3bf9e423
|
@ -36,6 +36,7 @@ import (
|
||||||
"github.com/karmada-io/karmada/pkg/resourceinterpreter"
|
"github.com/karmada-io/karmada/pkg/resourceinterpreter"
|
||||||
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
|
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
|
||||||
"github.com/karmada-io/karmada/pkg/util"
|
"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"
|
||||||
"github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager"
|
"github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager"
|
||||||
"github.com/karmada-io/karmada/pkg/util/fedinformer/keys"
|
"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.
|
// 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)
|
d.OnAdd(newObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ import (
|
||||||
"github.com/karmada-io/karmada/pkg/resourceinterpreter"
|
"github.com/karmada-io/karmada/pkg/resourceinterpreter"
|
||||||
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
|
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
|
||||||
"github.com/karmada-io/karmada/pkg/util"
|
"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"
|
||||||
"github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager"
|
"github.com/karmada-io/karmada/pkg/util/fedinformer/genericmanager"
|
||||||
"github.com/karmada-io/karmada/pkg/util/fedinformer/keys"
|
"github.com/karmada-io/karmada/pkg/util/fedinformer/keys"
|
||||||
|
@ -303,7 +304,7 @@ func (d *ResourceDetector) OnUpdate(oldObj, newObj interface{}) {
|
||||||
return
|
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())
|
klog.V(4).Infof("Ignore update event of object (kind=%s, %s/%s) as specification no change", unstructuredOldObj.GetKind(), unstructuredOldObj.GetNamespace(), unstructuredOldObj.GetName())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package detector
|
package eventfilter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
|
@ -1,10 +1,10 @@
|
||||||
package detector
|
package eventfilter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
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"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
|
@ -105,7 +105,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(3),
|
Replicas: pointer.Int32(3),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
||||||
|
@ -117,7 +117,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(5),
|
Replicas: pointer.Int32(5),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
||||||
|
@ -133,7 +133,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(3),
|
Replicas: pointer.Int32(3),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1},
|
||||||
|
@ -145,7 +145,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(3),
|
Replicas: pointer.Int32(3),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
||||||
|
@ -161,7 +161,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(3),
|
Replicas: pointer.Int32(3),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 1},
|
||||||
|
@ -173,7 +173,7 @@ func TestSpecificationChanged(t *testing.T) {
|
||||||
},
|
},
|
||||||
Spec: workloadv1alpha1.WorkloadSpec{
|
Spec: workloadv1alpha1.WorkloadSpec{
|
||||||
Replicas: pointer.Int32(5),
|
Replicas: pointer.Int32(5),
|
||||||
Template: v1.PodTemplateSpec{},
|
Template: corev1.PodTemplateSpec{},
|
||||||
Paused: false,
|
Paused: false,
|
||||||
},
|
},
|
||||||
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
Status: workloadv1alpha1.WorkloadStatus{ReadyReplicas: 3},
|
Loading…
Reference in New Issue