Skip to content

Commit 079a02d

Browse files
committed
[YUNIKORN-2924] [core] Remove occupiedResource handling logic (apache#984)
Closes: apache#984 Signed-off-by: Peter Bacsko <[email protected]>
1 parent 44705ae commit 079a02d

File tree

10 files changed

+20
-142
lines changed

10 files changed

+20
-142
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module github.com/apache/yunikorn-core
2222
go 1.21
2323

2424
require (
25-
github.com/apache/yunikorn-scheduler-interface v0.0.0-20240924203603-aaf51c93d3a0
25+
github.com/apache/yunikorn-scheduler-interface v0.0.0-20241016105739-f0e241aa0146
2626
github.com/google/btree v1.1.2
2727
github.com/google/go-cmp v0.6.0
2828
github.com/google/uuid v1.6.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/apache/yunikorn-scheduler-interface v0.0.0-20240924203603-aaf51c93d3a0 h1:/9j0YXuifvoOl4YVEbO0r+DPkkYLzaQ+/ac+xCc7SY8=
2-
github.com/apache/yunikorn-scheduler-interface v0.0.0-20240924203603-aaf51c93d3a0/go.mod h1:co3uU98sj1CUTPNTM13lTyi+CY0DOgDndDW2KiUjktU=
1+
github.com/apache/yunikorn-scheduler-interface v0.0.0-20241016105739-f0e241aa0146 h1:CZ4U7y19YSxNJVBNox3DahhuoxDL++naBl/kj+kqVFc=
2+
github.com/apache/yunikorn-scheduler-interface v0.0.0-20241016105739-f0e241aa0146/go.mod h1:co3uU98sj1CUTPNTM13lTyi+CY0DOgDndDW2KiUjktU=
33
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
44
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
55
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=

pkg/scheduler/context.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,9 +661,6 @@ func (cc *ClusterContext) updateNode(nodeInfo *si.NodeInfo) {
661661
if sr := nodeInfo.SchedulableResource; sr != nil {
662662
partition.updatePartitionResource(node.SetCapacity(resources.NewResourceFromProto(sr)))
663663
}
664-
if or := nodeInfo.OccupiedResource; or != nil {
665-
node.SetOccupiedResource(resources.NewResourceFromProto(or))
666-
}
667664
case si.NodeInfo_DRAIN_NODE:
668665
if node.IsSchedulable() {
669666
// set the state to not schedulable

pkg/scheduler/context_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ func TestContext_UpdateNode(t *testing.T) {
100100
SchedulableResource: &si.Resource{Resources: map[string]*si.Quantity{"first": {Value: 10}}},
101101
}
102102
full := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 10})
103-
half := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 5})
104103
partition := context.GetPartition(pName)
105104
if partition == nil {
106105
t.Fatalf("partition should have been found")
@@ -121,15 +120,9 @@ func TestContext_UpdateNode(t *testing.T) {
121120
assert.Assert(t, resources.Equals(full, partition.GetTotalPartitionResource()), "partition resource should be updated")
122121
// try to update: fail due to unknown action
123122
n.SchedulableResource = &si.Resource{Resources: map[string]*si.Quantity{"first": {Value: 5}}}
124-
n.OccupiedResource = &si.Resource{Resources: map[string]*si.Quantity{"first": {Value: 5}}}
125123
context.updateNode(n)
126124
node := partition.GetNode("test-1")
127125
assert.Assert(t, resources.Equals(full, node.GetAvailableResource()), "node available resource should not be updated")
128-
n.Action = si.NodeInfo_UPDATE
129-
context.updateNode(n)
130-
assert.Assert(t, resources.Equals(half, partition.GetTotalPartitionResource()), "partition resource should be updated")
131-
assert.Assert(t, resources.IsZero(node.GetAvailableResource()), "node available should have been updated to zero")
132-
assert.Assert(t, resources.Equals(half, node.GetOccupiedResource()), "node occupied should have been updated")
133126

134127
// other actions
135128
n = &si.NodeInfo{

pkg/scheduler/objects/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func NewNode(proto *si.NodeInfo) *Node {
7373
reservations: make(map[string]*reservation),
7474
totalResource: resources.NewResourceFromProto(proto.SchedulableResource),
7575
allocatedResource: resources.NewResource(),
76-
occupiedResource: resources.NewResourceFromProto(proto.OccupiedResource),
76+
occupiedResource: resources.NewResource(),
7777
allocations: make(map[string]*Allocation),
7878
schedulable: true,
7979
listeners: make([]NodeListener, 0),

pkg/scheduler/objects/node_test.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ func TestNewNode(t *testing.T) {
4141
if node != nil {
4242
t.Error("node not returned correctly: node is nul or incorrect name")
4343
}
44-
proto := newProto(testNode, nil, nil, nil)
44+
proto := newProto(testNode, nil, nil)
4545
node = NewNode(proto)
4646
if node == nil || node.NodeID != testNode {
4747
t.Error("node not returned correctly: node is nul or incorrect name")
4848
}
4949

5050
totalRes := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 100, "second": 100})
51-
proto = newProto(testNode, totalRes, nil, map[string]string{})
51+
proto = newProto(testNode, totalRes, map[string]string{})
5252
node = NewNode(proto)
5353
if node == nil || node.NodeID != testNode {
5454
t.Fatal("node not returned correctly: node is nul or incorrect name")
@@ -74,25 +74,20 @@ func TestNewNode(t *testing.T) {
7474
assert.Equal(t, "rack1", node.Rackname)
7575
assert.Equal(t, "partition1", node.Partition)
7676

77-
// test capacity/available/occupied resources
77+
// test capacity/available resources
7878
totalResources := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 100, "second": 100})
79-
occupiedResources := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 30, "second": 20})
8079
availableResources := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 70, "second": 80})
81-
proto = newProto(testNode, totalResources, occupiedResources, map[string]string{})
80+
proto = newProto(testNode, totalResources, map[string]string{})
8281
node = NewNode(proto)
8382
assert.Equal(t, node.NodeID, testNode, "node not returned correctly: node is nul or incorrect name")
8483
if !resources.Equals(node.GetCapacity(), totalResources) {
8584
t.Errorf("node total resources not set correctly: %v expected got %v",
8685
totalResources, node.GetCapacity())
8786
}
88-
if !resources.Equals(node.GetAvailableResource(), availableResources) {
87+
if !resources.Equals(node.GetAvailableResource(), totalResources) {
8988
t.Errorf("node available resources not set correctly: %v expected got %v",
9089
availableResources, node.GetAvailableResource())
9190
}
92-
if !resources.Equals(node.GetOccupiedResource(), occupiedResources) {
93-
t.Errorf("node occupied resources not set correctly: %v expected got %v",
94-
occupiedResources, node.GetOccupiedResource())
95-
}
9691
}
9792

9893
func TestCheckConditions(t *testing.T) {
@@ -328,7 +323,7 @@ func TestAttributes(t *testing.T) {
328323
testname := fmt.Sprintf("Attributes in the node %d", index)
329324
t.Run(testname, func(t *testing.T) {
330325
nodename := fmt.Sprintf("%s-%d", testNode, index)
331-
node := NewNode(newProto(nodename, nil, nil, tt.inputs))
326+
node := NewNode(newProto(nodename, nil, tt.inputs))
332327
if node == nil || node.NodeID != nodename {
333328
t.Error("node not returned correctly: node is nul or incorrect name")
334329
}
@@ -363,7 +358,7 @@ func TestAttributes(t *testing.T) {
363358
}
364359

365360
func TestGetInstanceType(t *testing.T) {
366-
proto := newProto(testNode, nil, nil, map[string]string{
361+
proto := newProto(testNode, nil, map[string]string{
367362
common.NodePartition: "partition1",
368363
"label1": "key1",
369364
"label2": "key2",
@@ -789,8 +784,7 @@ func TestAddRemoveListener(t *testing.T) {
789784
func TestNodeEvents(t *testing.T) {
790785
mockEvents := evtMock.NewEventSystem()
791786
total := resources.NewResourceFromMap(map[string]resources.Quantity{"cpu": 100, "memory": 100})
792-
occupied := resources.NewResourceFromMap(map[string]resources.Quantity{"cpu": 10, "memory": 10})
793-
proto := newProto(testNode, total, occupied, map[string]string{
787+
proto := newProto(testNode, total, map[string]string{
794788
"ready": "true",
795789
})
796790
node := NewNode(proto)
@@ -905,8 +899,7 @@ func TestPreconditions(t *testing.T) {
905899

906900
plugins.RegisterSchedulerPlugin(mock.NewPredicatePlugin(true, map[string]int{}))
907901
total := resources.NewResourceFromMap(map[string]resources.Quantity{"cpu": 100, "memory": 100})
908-
occupied := resources.NewResourceFromMap(map[string]resources.Quantity{"cpu": 10, "memory": 10})
909-
proto := newProto(testNode, total, occupied, map[string]string{
902+
proto := newProto(testNode, total, map[string]string{
910903
"ready": "true",
911904
})
912905
res := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 1})

pkg/scheduler/objects/nodesorting_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,13 @@ func TestSortPolicyWeighting(t *testing.T) {
166166
nc.SetNodeSortingPolicy(fair)
167167
totalRes := resources.NewResourceFromMap(map[string]resources.Quantity{"vcore": 2000, "memory": 16000})
168168

169-
proto1 := newProto("test1", totalRes, nil, map[string]string{})
169+
proto1 := newProto("test1", totalRes, map[string]string{})
170170
node1 := NewNode(proto1)
171171
if err := nc.AddNode(node1); err != nil {
172172
t.Fatal("Failed to add node1")
173173
}
174174

175-
proto2 := newProto("test2", totalRes, nil, map[string]string{})
175+
proto2 := newProto("test2", totalRes, map[string]string{})
176176
node2 := NewNode(proto2)
177177
if err := nc.AddNode(node2); err != nil {
178178
t.Fatal("Failed to add node2")
@@ -232,13 +232,13 @@ func TestSortPolicy(t *testing.T) {
232232
nc.SetNodeSortingPolicy(bp)
233233
totalRes := resources.NewResourceFromMap(map[string]resources.Quantity{"vcore": 2000, "memory": 4000})
234234

235-
proto1 := newProto("test1", totalRes, nil, map[string]string{})
235+
proto1 := newProto("test1", totalRes, map[string]string{})
236236
node1 := NewNode(proto1)
237237
if err := nc.AddNode(node1); err != nil {
238238
t.Fatal("Failed to add node1")
239239
}
240240

241-
proto2 := newProto("test2", totalRes, nil, map[string]string{})
241+
proto2 := newProto("test2", totalRes, map[string]string{})
242242
node2 := NewNode(proto2)
243243
if err := nc.AddNode(node2); err != nil {
244244
t.Fatal("Failed to add node2")
@@ -313,7 +313,7 @@ func TestAbsResourceUsage(t *testing.T) {
313313
nc.SetNodeSortingPolicy(fair)
314314
totalRes := resources.NewResourceFromMap(map[string]resources.Quantity{"vcore": 0, "memory": 16000})
315315

316-
proto1 := newProto("test1", totalRes, nil, map[string]string{})
316+
proto1 := newProto("test1", totalRes, map[string]string{})
317317
node1 := NewNode(proto1)
318318
if err := nc.AddNode(node1); err != nil {
319319
t.Fatal("Failed to add node1")

pkg/scheduler/objects/utilities_test.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func newNodeInternal(nodeID string, total, occupied *resources.Resource) *Node {
188188
return sn
189189
}
190190

191-
func newProto(nodeID string, totalResource, occupiedResource *resources.Resource, attributes map[string]string) *si.NodeInfo {
191+
func newProto(nodeID string, totalResource *resources.Resource, attributes map[string]string) *si.NodeInfo {
192192
proto := si.NodeInfo{
193193
NodeID: nodeID,
194194
Attributes: attributes,
@@ -204,15 +204,6 @@ func newProto(nodeID string, totalResource, occupiedResource *resources.Resource
204204
}
205205
}
206206

207-
if occupiedResource != nil {
208-
proto.OccupiedResource = &si.Resource{
209-
Resources: map[string]*si.Quantity{},
210-
}
211-
for name, value := range occupiedResource.Resources {
212-
quantity := si.Quantity{Value: int64(value)}
213-
proto.OccupiedResource.Resources[name] = &quantity
214-
}
215-
}
216207
return &proto
217208
}
218209

pkg/scheduler/tests/operation_test.go

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -564,97 +564,6 @@ partitions:
564564
}
565565
}
566566

567-
func TestUpdateNodeOccupiedResources(t *testing.T) {
568-
// Register RM
569-
configData := `
570-
partitions:
571-
-
572-
name: default
573-
queues:
574-
- name: root
575-
submitacl: "*"
576-
queues:
577-
- name: a
578-
resources:
579-
max:
580-
memory: 150
581-
vcore: 20
582-
`
583-
// Start all tests
584-
ms := &mockScheduler{}
585-
defer ms.Stop()
586-
587-
err := ms.Init(configData, false, false)
588-
assert.NilError(t, err, "RegisterResourceManager failed")
589-
590-
// Check queues of cache and scheduler.
591-
partitionInfo := ms.scheduler.GetClusterContext().GetPartition("[rm:123]default")
592-
assert.Assert(t, partitionInfo.GetTotalPartitionResource() == nil, "partition info max resource nil")
593-
594-
// Register a node
595-
err = ms.proxy.UpdateNode(&si.NodeRequest{
596-
Nodes: []*si.NodeInfo{
597-
{
598-
NodeID: "node-1:1234",
599-
Attributes: map[string]string{},
600-
SchedulableResource: &si.Resource{
601-
Resources: map[string]*si.Quantity{
602-
"memory": {Value: 100},
603-
"vcore": {Value: 10},
604-
},
605-
},
606-
Action: si.NodeInfo_CREATE,
607-
},
608-
},
609-
RmID: "rm:123",
610-
})
611-
612-
assert.NilError(t, err, "NodeRequest failed")
613-
614-
// Wait until node is registered
615-
context := ms.scheduler.GetClusterContext()
616-
ms.mockRM.waitForAcceptedNode(t, "node-1:1234", 1000)
617-
waitForNewNode(t, context, "node-1:1234", "[rm:123]default", 1000)
618-
619-
// verify node capacity
620-
assert.Equal(t, len(partitionInfo.GetNodes()), 1)
621-
node1 := partitionInfo.GetNode("node-1:1234")
622-
assert.Equal(t, int64(node1.GetCapacity().Resources[common.Memory]), int64(100))
623-
schedulingNode1 := ms.scheduler.GetClusterContext().
624-
GetNode("node-1:1234", "[rm:123]default")
625-
assert.Equal(t, int64(schedulingNode1.GetAllocatedResource().Resources[common.Memory]), int64(0))
626-
assert.Equal(t, int64(schedulingNode1.GetAvailableResource().Resources[common.Memory]), int64(100))
627-
628-
// update node capacity
629-
err = ms.proxy.UpdateNode(&si.NodeRequest{
630-
Nodes: []*si.NodeInfo{
631-
{
632-
NodeID: "node-1:1234",
633-
Attributes: map[string]string{},
634-
OccupiedResource: &si.Resource{
635-
Resources: map[string]*si.Quantity{
636-
"memory": {Value: 80},
637-
"vcore": {Value: 5},
638-
},
639-
},
640-
Action: si.NodeInfo_UPDATE,
641-
},
642-
},
643-
RmID: "rm:123",
644-
})
645-
646-
assert.NilError(t, err, "NodeRequest failed")
647-
648-
waitForAvailableNodeResource(t, ms.scheduler.GetClusterContext(), "[rm:123]default",
649-
[]string{"node-1:1234"}, 20, 1000)
650-
assert.Equal(t, int64(node1.GetCapacity().Resources[common.Memory]), int64(100))
651-
assert.Equal(t, int64(node1.GetCapacity().Resources[common.CPU]), int64(10))
652-
assert.Equal(t, int64(node1.GetOccupiedResource().Resources[common.Memory]), int64(80))
653-
assert.Equal(t, int64(node1.GetOccupiedResource().Resources[common.CPU]), int64(5))
654-
assert.Equal(t, int64(schedulingNode1.GetAllocatedResource().Resources[common.Memory]), int64(0))
655-
assert.Equal(t, int64(schedulingNode1.GetAvailableResource().Resources[common.Memory]), int64(20))
656-
}
657-
658567
func TestForeignPodResourceUsage(t *testing.T) {
659568
// Register RM
660569
configData := `

pkg/scheduler/utilities_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -647,20 +647,15 @@ func newAllocationAskPreempt(allocKey, appID string, prio int32, res *resources.
647647
})
648648
}
649649

650-
func newNodeWithResources(nodeID string, max, occupied *resources.Resource) *objects.Node {
650+
func newNodeMaxResource(nodeID string, max *resources.Resource) *objects.Node {
651651
proto := &si.NodeInfo{
652652
NodeID: nodeID,
653653
Attributes: map[string]string{},
654654
SchedulableResource: max.ToProto(),
655-
OccupiedResource: occupied.ToProto(),
656655
}
657656
return objects.NewNode(proto)
658657
}
659658

660-
func newNodeMaxResource(nodeID string, max *resources.Resource) *objects.Node {
661-
return newNodeWithResources(nodeID, max, nil)
662-
}
663-
664659
// partition with an expected basic queue hierarchy
665660
// root -> parent -> leaf1
666661
//

0 commit comments

Comments
 (0)