Skip to content

Commit

Permalink
GroupClusters should sort by score and availableReplica count
Browse files Browse the repository at this point in the history
Signed-off-by: mszacillo <[email protected]>
  • Loading branch information
mszacillo committed Jul 11, 2024
1 parent a65e791 commit ce89d21
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 6 deletions.
9 changes: 8 additions & 1 deletion pkg/scheduler/core/spreadconstraint/group_clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package spreadconstraint

import (
"k8s.io/utils/ptr"

clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
Expand Down Expand Up @@ -143,7 +145,12 @@ func (info *GroupClustersInfo) generateClustersInfo(clustersScore framework.Clus
info.Clusters[i].AvailableReplicas += int64(rbSpec.AssignedReplicasForCluster(clustersReplica.Name))
}

sortClusters(info.Clusters)
sortClusters(info.Clusters, func(i *ClusterDetailInfo, j *ClusterDetailInfo) *bool {
if i.AvailableReplicas != j.AvailableReplicas {
return ptr.To(i.AvailableReplicas > j.AvailableReplicas)
}
return nil
})
}

func (info *GroupClustersInfo) generateZoneInfo(spreadConstraints []policyv1alpha1.SpreadConstraint) {
Expand Down
50 changes: 45 additions & 5 deletions pkg/scheduler/core/spreadconstraint/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"reflect"
"testing"

"k8s.io/utils/ptr"

policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
)

Expand Down Expand Up @@ -75,9 +77,10 @@ func TestIsSpreadConstraintExisted(t *testing.T) {

func Test_sortClusters(t *testing.T) {
tests := []struct {
name string
infos []ClusterDetailInfo
want []ClusterDetailInfo
name string
infos []ClusterDetailInfo
want []ClusterDetailInfo
compareFunction func(*ClusterDetailInfo, *ClusterDetailInfo) *bool
}{
{
name: "different scores",
Expand All @@ -103,7 +106,7 @@ func Test_sortClusters(t *testing.T) {
},
},
{
name: "same score",
name: "same score, default to sort by name",
infos: []ClusterDetailInfo{
{
Name: "b",
Expand All @@ -129,10 +132,47 @@ func Test_sortClusters(t *testing.T) {
},
},
},
{
name: "same score, sort by availableReplicas",
infos: []ClusterDetailInfo{
{
Name: "a",
Score: 1,
AvailableReplicas: 5,
},
{
Name: "b",
Score: 1,
AvailableReplicas: 10,
},
},
want: []ClusterDetailInfo{
{
Name: "b",
Score: 1,
AvailableReplicas: 10,
},
{
Name: "a",
Score: 1,
AvailableReplicas: 5,
},
},
compareFunction: func(i *ClusterDetailInfo, j *ClusterDetailInfo) *bool {
if i.AvailableReplicas != j.AvailableReplicas {
return ptr.To(i.AvailableReplicas > j.AvailableReplicas)
}
return nil
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
sortClusters(tt.infos)
if tt.compareFunction != nil {
sortClusters(tt.infos, tt.compareFunction)
} else {
sortClusters(tt.infos)
}
if !reflect.DeepEqual(tt.infos, tt.want) {
t.Errorf("sortClusters() = %v, want %v", tt.infos, tt.want)
}
Expand Down

0 comments on commit ce89d21

Please sign in to comment.