Skip to content

Commit

Permalink
nodegroup score, predicate fix & ut fix
Browse files Browse the repository at this point in the history
Signed-off-by: wuyue <wuyue_andrew@outlook.com>
  • Loading branch information
wuyueandrew committed Nov 8, 2023
1 parent cf2a0ef commit 7635571
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 21 deletions.
50 changes: 41 additions & 9 deletions pkg/scheduler/plugins/nodegroup/nodegroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,20 +68,38 @@ func (q queueGroupAffinity) predicate(queue, group string) error {
if len(queue) == 0 {
return nil
}
flag := false
if q.queueGroupAffinityRequired != nil {
if groups, ok := q.queueGroupAffinityRequired[queue]; ok {
if !contains(groups, group) {
return errors.New("NodeGroupAffinityRequired")
if contains(groups, group) {
flag = flag || true
}
}
}
if q.queueGroupAffinityPreferred != nil {
if groups, ok := q.queueGroupAffinityPreferred[queue]; ok {
if contains(groups, group) {
flag = flag || true
}
}
}
if q.queueGroupAntiAffinityPreferred != nil {
if groups, ok := q.queueGroupAntiAffinityPreferred[queue]; ok {
if contains(groups, group) {
flag = flag || true
}
}
}
if q.queueGroupAntiAffinityRequired != nil {
if groups, ok := q.queueGroupAntiAffinityRequired[queue]; ok {
if groups, ok := q.queueGroupAffinityPreferred[queue]; ok {
if contains(groups, group) {
return errors.New("NodeGroupAntiAffinityRequired")
flag = flag || false
}
}
}
if !flag {
return errors.New("not satisfy")
}
return nil
}

Expand All @@ -92,15 +110,31 @@ func (q queueGroupAffinity) score(queue string, group string) float64 {
}
if q.queueGroupAffinityPreferred != nil {
if groups, ok := q.queueGroupAffinityPreferred[queue]; ok {
if !contains(groups, group) {
return 1.0
if contains(groups, group) {
nodeScore = 0.5
}
}
}
if q.queueGroupAffinityRequired != nil {
if groups, ok := q.queueGroupAffinityRequired[queue]; ok {
if contains(groups, group) {
nodeScore = 1.0
}
}
}

if q.queueGroupAntiAffinityPreferred != nil {
if groups, ok := q.queueGroupAntiAffinityPreferred[queue]; ok {
if contains(groups, group) {
return -1.0
nodeScore = 0.25
}
}
}

if q.queueGroupAntiAffinityRequired != nil {
if groups, ok := q.queueGroupAntiAffinityRequired[queue]; ok {
if contains(groups, group) {
nodeScore = -1.0
}
}
}
Expand Down Expand Up @@ -133,8 +167,6 @@ func contains(slice []string, item string) bool {
// - name: predicates
// - name: proportion
// - name: nodegroup
// enablePredicate: true
// enableNodeOrder: true

func calculateArguments(ssn *framework.Session, args framework.Arguments) queueGroupAffinity {
queueGroupAffinity := NewQueueGroupAffinity()
Expand Down
40 changes: 28 additions & 12 deletions pkg/scheduler/plugins/nodegroup/nodegroup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ func TestScore(t *testing.T) {
n2 := util.BuildNode("n2", util.BuildResourceList("4", "16Gi"), map[string]string{
NodeGroupNameKey: "group2",
})
n3 := util.BuildNode("n3", util.BuildResourceList("4", "16Gi"), make(map[string]string))
n3 := util.BuildNode("n3", util.BuildResourceList("4", "16Gi"), map[string]string{
NodeGroupNameKey: "group3",
})
n4 := util.BuildNode("n4", util.BuildResourceList("4", "16Gi"), map[string]string{
NodeGroupNameKey: "group4",
})
n5 := util.BuildNode("n5", util.BuildResourceList("4", "16Gi"), make(map[string]string))

pg1 := &schedulingv1.PodGroup{
ObjectMeta: metav1.ObjectMeta{
Expand All @@ -59,7 +65,12 @@ func TestScore(t *testing.T) {
Weight: 1,
Affinity: &schedulingv1.Affinity{
NodeGroupAffinity: &schedulingv1.NodeGroupAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []string{"group1"},
RequiredDuringSchedulingIgnoredDuringExecution: []string{"group1"},
PreferredDuringSchedulingIgnoredDuringExecution: []string{"group3"},
},
NodeGroupAntiAffinity: &schedulingv1.NodeGroupAntiAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []string{},
PreferredDuringSchedulingIgnoredDuringExecution: []string{"group4"},
},
},
},
Expand All @@ -73,7 +84,8 @@ func TestScore(t *testing.T) {
Weight: 1,
Affinity: &schedulingv1.Affinity{
NodeGroupAffinity: &schedulingv1.NodeGroupAffinity{
RequiredDuringSchedulingIgnoredDuringExecution: []string{"group2"},
RequiredDuringSchedulingIgnoredDuringExecution: []string{"group2"},
PreferredDuringSchedulingIgnoredDuringExecution: []string{"group3"},
},
},
},
Expand Down Expand Up @@ -101,21 +113,25 @@ func TestScore(t *testing.T) {
p1,
},
nodes: []*v1.Node{
n1, n2, n3,
n1, n2, n3, n4, n5,
},
arguments: framework.Arguments{},
expected: map[string]map[string]float64{
"c1/p1": {
"n1": 0.0,
"n1": 1.0,
"n2": 0.0,
"n3": 0.0,
"n3": 0.5,
"n4": 0.25,
"n5": 0.0,
},
},
expectedStatus: map[string]map[string]int{
"c1/p1": {
"n1": api.Success,
"n2": api.UnschedulableAndUnresolvable,
"n3": api.UnschedulableAndUnresolvable,
"n3": api.Success,
"n4": api.Success,
"n5": api.UnschedulableAndUnresolvable,
},
},
},
Expand Down Expand Up @@ -180,11 +196,11 @@ func TestScore(t *testing.T) {
t.Errorf("case%d: task %s on node %s expect have score %v, but get %v", i, taskID, node.Name, expectScore, score)
}

status, err := ssn.PredicateFn(task, node)
if err != nil {
t.Logf("case%d: task %s on node %s has err %v", i, taskID, node.Name, err)
continue
}
status, _ := ssn.PredicateFn(task, node)
// if err != nil {
// t.Logf("case%d: task %s on node %s has err %v", i, taskID, node.Name, err)
// continue
// }
if expectStatus := test.expectedStatus[taskID][node.Name]; expectStatus != status[0].Code {
t.Errorf("case%d: task %s on node %s expect have status code %v, but get %v", i, taskID, node.Name, expectStatus, status[0].Code)
}
Expand Down

0 comments on commit 7635571

Please sign in to comment.