@@ -20,9 +20,9 @@ import (
20
20
"fmt"
21
21
"sort"
22
22
23
- clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
24
23
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
25
24
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
25
+ "github.com/karmada-io/karmada/pkg/scheduler/core/spreadconstraint"
26
26
"github.com/karmada-io/karmada/pkg/scheduler/framework"
27
27
"github.com/karmada-io/karmada/pkg/util"
28
28
"github.com/karmada-io/karmada/pkg/util/helper"
@@ -35,14 +35,14 @@ func (a TargetClustersList) Len() int { return len(a) }
35
35
func (a TargetClustersList ) Swap (i , j int ) { a [i ], a [j ] = a [j ], a [i ] }
36
36
func (a TargetClustersList ) Less (i , j int ) bool { return a [i ].Replicas > a [j ].Replicas }
37
37
38
- func getStaticWeightInfoList (clusters []* clusterv1alpha1. Cluster , weightList []policyv1alpha1.StaticClusterWeight ,
38
+ func getStaticWeightInfoList (clusters []spreadconstraint. ClusterDetailInfo , weightList []policyv1alpha1.StaticClusterWeight ,
39
39
lastTargetClusters []workv1alpha2.TargetCluster ) helper.ClusterWeightInfoList {
40
40
list := make (helper.ClusterWeightInfoList , 0 )
41
41
for _ , cluster := range clusters {
42
42
var weight int64
43
43
var lastReplicas int32
44
44
for _ , staticWeightRule := range weightList {
45
- if util .ClusterMatches (cluster , staticWeightRule .TargetCluster ) {
45
+ if util .ClusterMatches (cluster . Cluster , staticWeightRule .TargetCluster ) {
46
46
weight = util .MaxInt64 (weight , staticWeightRule .Weight )
47
47
}
48
48
}
@@ -107,7 +107,7 @@ func dynamicScaleDown(state *assignState) ([]workv1alpha2.TargetCluster, error)
107
107
// 3. scheduledClusters and assignedReplicas are not set, which implicates we consider this action as a first schedule.
108
108
state .targetReplicas = state .spec .Replicas
109
109
state .scheduledClusters = nil
110
- state .buildAvailableClusters (func (_ []* clusterv1alpha1. Cluster , spec * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
110
+ state .buildAvailableClusters (func (_ []spreadconstraint. ClusterDetailInfo , spec * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
111
111
availableClusters := make (TargetClustersList , len (spec .Clusters ))
112
112
copy (availableClusters , spec .Clusters )
113
113
sort .Sort (availableClusters )
@@ -119,8 +119,14 @@ func dynamicScaleDown(state *assignState) ([]workv1alpha2.TargetCluster, error)
119
119
func dynamicScaleUp (state * assignState ) ([]workv1alpha2.TargetCluster , error ) {
120
120
// Target is the extra ones.
121
121
state .targetReplicas = state .spec .Replicas - state .assignedReplicas
122
- state .buildAvailableClusters (func (clusters []* clusterv1alpha1.Cluster , spec * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
123
- clusterAvailableReplicas := calAvailableReplicas (clusters , spec )
122
+ state .buildAvailableClusters (func (clusters []spreadconstraint.ClusterDetailInfo , _ * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
123
+ clusterAvailableReplicas := make ([]workv1alpha2.TargetCluster , len (clusters ))
124
+ for i , cluster := range clusters {
125
+ clusterAvailableReplicas [i ] = workv1alpha2.TargetCluster {
126
+ Name : cluster .Name ,
127
+ Replicas : cluster .AllocatableReplicas ,
128
+ }
129
+ }
124
130
sort .Sort (TargetClustersList (clusterAvailableReplicas ))
125
131
return clusterAvailableReplicas
126
132
})
@@ -131,8 +137,14 @@ func dynamicScaleUp(state *assignState) ([]workv1alpha2.TargetCluster, error) {
131
137
func dynamicFreshScale (state * assignState ) ([]workv1alpha2.TargetCluster , error ) {
132
138
// 1. targetReplicas is set to desired replicas
133
139
state .targetReplicas = state .spec .Replicas
134
- state .buildAvailableClusters (func (clusters []* clusterv1alpha1.Cluster , spec * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
135
- clusterAvailableReplicas := calAvailableReplicas (clusters , spec )
140
+ state .buildAvailableClusters (func (clusters []spreadconstraint.ClusterDetailInfo , _ * workv1alpha2.ResourceBindingSpec ) []workv1alpha2.TargetCluster {
141
+ clusterAvailableReplicas := make ([]workv1alpha2.TargetCluster , len (clusters ))
142
+ for i , cluster := range clusters {
143
+ clusterAvailableReplicas [i ] = workv1alpha2.TargetCluster {
144
+ Name : cluster .Name ,
145
+ Replicas : cluster .AllocatableReplicas ,
146
+ }
147
+ }
136
148
// 2. clusterAvailableReplicas should take into account the replicas already allocated
137
149
for _ , scheduledCluster := range state .scheduledClusters {
138
150
for i , availableCluster := range clusterAvailableReplicas {
0 commit comments