You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@yunikorn.apache.org by ma...@apache.org on 2026/10/01 08:32:51 UTC
(yunikorn-core) branch master updated: YUNIKORN-2251: Add node instanceType to the node added event message (#1149)
This is an automated email from the ASF dual-hosted git repository.
manirajv06 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git
The following commit(s) were added to refs/heads/master by this push:
new 3ac9f4e5 YUNIKORN-2251: Add node instanceType to the node added event message (#1149)
3ac9f4e5 is described below
commit 3ac9f4e5a33126cfb0b791d729977f4c04a29d72
Author: stantheman0128 <st...@gmail.com>
AuthorDate: Thu Oct 1 14:02:18 2026 +0530
YUNIKORN-2251: Add node instanceType to the node added event message (#1149)
The node added event carried a fixed message, so a consumer reading the
event stream could not tell what kind of node joined without a separate
lookup. Include the instance type in the message, using the same key and
value style as the schedulable changed event.
Nodes without the si/instance-type attribute report UNKNOWN, which is what
Node.GetInstanceType already returns for that case.
Closes: #1149
Signed-off-by: mani <ma...@gmail.com>
---
pkg/scheduler/objects/events/node_events.go | 4 ++--
pkg/scheduler/objects/events/node_events_test.go | 7 +++---
pkg/scheduler/objects/node.go | 2 +-
pkg/scheduler/objects/node_test.go | 27 ++++++++++++++++++++++++
pkg/scheduler/tests/application_tracking_test.go | 3 ++-
5 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/pkg/scheduler/objects/events/node_events.go b/pkg/scheduler/objects/events/node_events.go
index 09a5d9aa..c04fa01d 100644
--- a/pkg/scheduler/objects/events/node_events.go
+++ b/pkg/scheduler/objects/events/node_events.go
@@ -29,11 +29,11 @@ type NodeEvents struct {
eventSystem events.EventSystem
}
-func (n *NodeEvents) SendNodeAddedEvent(nodeID string, capacity *resources.Resource) {
+func (n *NodeEvents) SendNodeAddedEvent(nodeID string, capacity *resources.Resource, instanceType string) {
if !n.eventSystem.IsEventTrackingEnabled() {
return
}
- event := events.CreateNodeEventRecord(nodeID, "Node added to the scheduler", common.Empty, si.EventRecord_ADD,
+ event := events.CreateNodeEventRecord(nodeID, "Node added to the scheduler, instanceType: "+instanceType, common.Empty, si.EventRecord_ADD,
si.EventRecord_DETAILS_NONE, capacity)
n.eventSystem.AddEvent(event)
}
diff --git a/pkg/scheduler/objects/events/node_events_test.go b/pkg/scheduler/objects/events/node_events_test.go
index f9d79121..9b35e9cf 100644
--- a/pkg/scheduler/objects/events/node_events_test.go
+++ b/pkg/scheduler/objects/events/node_events_test.go
@@ -30,22 +30,23 @@ import (
)
const nodeID1 = "node-1"
+const instanceType1 = "instance-type-1"
func TestSendNodeAddedEvent(t *testing.T) {
resource := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 1})
eventSystem := mock.NewEventSystemDisabled()
ne := NewNodeEvents(eventSystem)
- ne.SendNodeAddedEvent(nodeID1, resource)
+ ne.SendNodeAddedEvent(nodeID1, resource, instanceType1)
assert.Equal(t, 0, len(eventSystem.Events), "unexpected event")
eventSystem = mock.NewEventSystem()
ne = NewNodeEvents(eventSystem)
- ne.SendNodeAddedEvent(nodeID1, resource)
+ ne.SendNodeAddedEvent(nodeID1, resource, instanceType1)
assert.Equal(t, 1, len(eventSystem.Events), "event was not generated")
event := eventSystem.Events[0]
assert.Equal(t, nodeID1, event.ObjectID)
assert.Equal(t, common.Empty, event.ReferenceID)
- assert.Equal(t, "Node added to the scheduler", event.Message)
+ assert.Equal(t, "Node added to the scheduler, instanceType: "+instanceType1, event.Message)
assert.Equal(t, si.EventRecord_ADD, event.EventChangeType)
assert.Equal(t, si.EventRecord_DETAILS_NONE, event.EventChangeDetail)
assert.Equal(t, 1, len(event.Resource.Resources))
diff --git a/pkg/scheduler/objects/node.go b/pkg/scheduler/objects/node.go
index eb987ac7..efa62eae 100644
--- a/pkg/scheduler/objects/node.go
+++ b/pkg/scheduler/objects/node.go
@@ -721,7 +721,7 @@ func (sn *Node) getListeners() []NodeListener {
func (sn *Node) SendNodeAddedEvent() {
sn.RLock()
defer sn.RUnlock()
- sn.nodeEvents.SendNodeAddedEvent(sn.NodeID, sn.totalResource.Clone())
+ sn.nodeEvents.SendNodeAddedEvent(sn.NodeID, sn.totalResource.Clone(), sn.GetInstanceType())
}
func (sn *Node) SendNodeRemovedEvent() {
diff --git a/pkg/scheduler/objects/node_test.go b/pkg/scheduler/objects/node_test.go
index 32eda82a..9bb27881 100644
--- a/pkg/scheduler/objects/node_test.go
+++ b/pkg/scheduler/objects/node_test.go
@@ -34,6 +34,7 @@ import (
)
const testNode = "testnode"
+const instType = "test-instance-type"
func TestNewNode(t *testing.T) {
// simple nil check
@@ -915,6 +916,32 @@ func TestNodeEvents(t *testing.T) {
assert.Equal(t, si.EventRecord_NODE_RESERVATION, event.EventChangeDetail)
}
+func TestNodeAddedEventInstanceType(t *testing.T) {
+ total := resources.NewResourceFromMap(map[string]resources.Quantity{"cpu": 100, "memory": 100})
+ tests := []struct {
+ name string
+ attributes map[string]string
+ want string
+ }{
+ {"instance type set", map[string]string{common.InstanceType: instType}, instType},
+ {"instance type not set", map[string]string{"ready": "true"}, UnknownInstanceType},
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ mockEvents := evtMock.NewEventSystem()
+ node := NewNode(newProto(testNode, total, tt.attributes))
+ node.nodeEvents = schedEvt.NewNodeEvents(mockEvents)
+
+ node.SendNodeAddedEvent()
+ assert.Equal(t, 1, len(mockEvents.Events))
+ event := mockEvents.Events[0]
+ assert.Equal(t, si.EventRecord_NODE, event.Type)
+ assert.Equal(t, si.EventRecord_ADD, event.EventChangeType)
+ assert.Equal(t, "Node added to the scheduler, instanceType: "+tt.want, event.Message)
+ })
+ }
+}
+
func TestNode_FitInNode(t *testing.T) {
total := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 10, "second": 10})
request := resources.NewResourceFromMap(map[string]resources.Quantity{"first": 1, "second": 1})
diff --git a/pkg/scheduler/tests/application_tracking_test.go b/pkg/scheduler/tests/application_tracking_test.go
index 8385f0ce..e8de889b 100644
--- a/pkg/scheduler/tests/application_tracking_test.go
+++ b/pkg/scheduler/tests/application_tracking_test.go
@@ -31,6 +31,7 @@ import (
"gotest.tools/v3/assert"
"github.com/apache/yunikorn-core/pkg/common"
+ "github.com/apache/yunikorn-core/pkg/scheduler/objects"
"github.com/apache/yunikorn-core/pkg/webservice/dao"
"github.com/apache/yunikorn-scheduler-interface/lib/go/si"
)
@@ -282,7 +283,7 @@ func verifyNodeAddedAndQueueMaxSetEvents(t *testing.T, events []*si.EventRecord)
assert.Equal(t, si.EventRecord_QUEUE_MAX, events[1].EventChangeDetail)
assert.Equal(t, "node-1:1234", events[2].ObjectID)
- assert.Equal(t, "Node added to the scheduler", events[2].Message)
+ assert.Equal(t, "Node added to the scheduler, instanceType: "+objects.UnknownInstanceType, events[2].Message)
assert.Equal(t, "", events[2].ReferenceID)
assert.Equal(t, si.EventRecord_NODE, events[2].Type)
assert.Equal(t, si.EventRecord_ADD, events[2].EventChangeType)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@yunikorn.apache.org
For additional commands, e-mail: issues-help@yunikorn.apache.org