Skip to content

Commit

Permalink
Expose assignReplicas function in scheduler
Browse files Browse the repository at this point in the history
Signed-off-by: chaosi-zju <[email protected]>
  • Loading branch information
chaosi-zju committed Nov 21, 2023
1 parent bf1098b commit 4e6e1e2
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 2 deletions.
4 changes: 2 additions & 2 deletions pkg/scheduler/core/generic_scheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (g *genericScheduler) Schedule(
}
klog.V(4).Infof("Selected clusters: %v", clusters)

clustersWithReplicas, err := g.assignReplicas(clusters, spec.Placement, spec)
clustersWithReplicas, err := g.AssignReplicas(clusters, spec.Placement, spec)
if err != nil {
return result, fmt.Errorf("failed to assign replicas: %w", err)
}
Expand Down Expand Up @@ -166,7 +166,7 @@ func (g *genericScheduler) selectClusters(clustersScore framework.ClusterScoreLi
return spreadconstraint.SelectBestClusters(placement, groupClustersInfo, spec.Replicas)
}

func (g *genericScheduler) assignReplicas(
func (g *genericScheduler) AssignReplicas(
clusters []*clusterv1alpha1.Cluster,
placement *policyv1alpha1.Placement,
object *workv1alpha2.ResourceBindingSpec,
Expand Down
61 changes: 61 additions & 0 deletions pkg/scheduler/core/generic_scheduler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package core

import (
"testing"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"

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"
"github.com/karmada-io/karmada/pkg/util"
"github.com/karmada-io/karmada/test/helper"
)

func Test_genericScheduler_AssignReplicas(t *testing.T) {
tests := []struct {
name string
clusters []*clusterv1alpha1.Cluster
placement *policyv1alpha1.Placement
object *workv1alpha2.ResourceBindingSpec
want []workv1alpha2.TargetCluster
wantErr bool
}{
{
name: "replica 4, dynamic weighted 1:1",
clusters: []*clusterv1alpha1.Cluster{
helper.NewClusterWithResource(ClusterMember1, corev1.ResourceList{
corev1.ResourcePods: *resource.NewQuantity(4, resource.DecimalSI),
}, util.EmptyResource().ResourceList(), util.EmptyResource().ResourceList()),
helper.NewClusterWithResource(ClusterMember2, corev1.ResourceList{
corev1.ResourcePods: *resource.NewQuantity(4, resource.DecimalSI),
}, util.EmptyResource().ResourceList(), util.EmptyResource().ResourceList()),
},
object: &workv1alpha2.ResourceBindingSpec{
Replicas: 4,
},
placement: &policyv1alpha1.Placement{
ReplicaScheduling: dynamicWeightStrategy,
},
want: []workv1alpha2.TargetCluster{
{Name: ClusterMember1, Replicas: 2},
{Name: ClusterMember2, Replicas: 2},
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := &genericScheduler{}
got, err := g.AssignReplicas(tt.clusters, tt.placement, tt.object)
if (err != nil) != tt.wantErr {
t.Errorf("AssignReplicas() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !helper.IsScheduleResultEqual(got, tt.want) {
t.Errorf("AssignReplicas() got = %v, want %v", got, tt.want)
}
})
}
}

0 comments on commit 4e6e1e2

Please sign in to comment.