From da44a5d9f95c2f0c8a61c0a46e8442a47b27e031 Mon Sep 17 00:00:00 2001 From: Poor12 Date: Thu, 16 Mar 2023 10:32:41 +0800 Subject: [PATCH] avoid the same cluster appearing in both spec.clusters and spec.gracefulEvictionTasks Signed-off-by: Poor12 --- .../gracefuleviction/evictiontask.go | 7 +++++++ .../gracefuleviction/evictiontask_test.go | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/controllers/gracefuleviction/evictiontask.go b/pkg/controllers/gracefuleviction/evictiontask.go index 077cb1a2f..997b91d87 100644 --- a/pkg/controllers/gracefuleviction/evictiontask.go +++ b/pkg/controllers/gracefuleviction/evictiontask.go @@ -48,6 +48,13 @@ func assessEvictionTasks(bindingSpec workv1alpha2.ResourceBindingSpec, } func assessSingleTask(task workv1alpha2.GracefulEvictionTask, opt assessmentOption) *workv1alpha2.GracefulEvictionTask { + // avoid the same cluster appearing in both spec.clusters and spec.gracefulEvictionTasks + for _, targetCluster := range opt.scheduleResult { + if task.FromCluster == targetCluster.Name { + return nil + } + } + if task.SuppressDeletion != nil { if *task.SuppressDeletion { return &task diff --git a/pkg/controllers/gracefuleviction/evictiontask_test.go b/pkg/controllers/gracefuleviction/evictiontask_test.go index 2efb87853..5d968d074 100644 --- a/pkg/controllers/gracefuleviction/evictiontask_test.go +++ b/pkg/controllers/gracefuleviction/evictiontask_test.go @@ -210,6 +210,25 @@ func Test_assessSingleTask(t *testing.T) { }, want: nil, }, + { + name: "cluster appears both in targetClusters and gracefulEvictionTasks", + args: args{ + task: workv1alpha2.GracefulEvictionTask{ + FromCluster: "member1", + CreationTimestamp: metav1.Time{Time: timeNow.Add(time.Minute * -1)}, + }, + opt: assessmentOption{ + timeout: timeout, + scheduleResult: []workv1alpha2.TargetCluster{ + {Name: "member1"}, + }, + observedStatus: []workv1alpha2.AggregatedStatusItem{ + {ClusterName: "member1", Health: workv1alpha2.ResourceHealthy}, + }, + }, + }, + want: nil, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {