This is an automated email from the ASF dual-hosted git repository.
pbacsko 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 4f2f1b38 [YUNIKORN-2854]Add queue maxRunningApps metrics (#1012)
4f2f1b38 is described below
commit 4f2f1b3865a893c49c3f4e185b3ba75ab6cf7ae5
Author: kaichiachen <[email protected]>
AuthorDate: Tue Feb 18 15:23:52 2025 +0100
[YUNIKORN-2854]Add queue maxRunningApps metrics (#1012)
Closes: #1012
Signed-off-by: Peter Bacsko <[email protected]>
---
pkg/metrics/queue.go | 17 +++++++++++------
pkg/metrics/queue_test.go | 8 ++++++++
pkg/scheduler/objects/queue.go | 8 ++++++++
pkg/scheduler/objects/queue_test.go | 8 +++++++-
4 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/pkg/metrics/queue.go b/pkg/metrics/queue.go
index d8917b85..cb91a938 100644
--- a/pkg/metrics/queue.go
+++ b/pkg/metrics/queue.go
@@ -44,10 +44,11 @@ const (
ContainerAllocated = "allocated"
ContainerRejected = "rejected"
- QueueGuaranteed = "guaranteed"
- QueueMax = "max"
- QueuePending = "pending"
- QueuePreempting = "preempting"
+ QueueGuaranteed = "guaranteed"
+ QueueMax = "max"
+ QueuePending = "pending"
+ QueuePreempting = "preempting"
+ QueueMaxRunningApps = "maxRunningApps"
)
// QueueMetrics to declare queue metrics
@@ -99,7 +100,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Namespace: Namespace,
Name: "queue_resource",
ConstLabels: prometheus.Labels{"queue": name},
- Help: "Queue resource metrics. State of the
resource includes `guaranteed`, `max`, `allocated`, `pending`, `preempting`.",
+ Help: "Queue resource metrics. State of the
resource includes `guaranteed`, `max`, `allocated`, `pending`, `preempting`,
`maxRunningApps`.",
}, []string{"state", "resource"})
q.resourceMetricsSubsystem = prometheus.NewGaugeVec(
@@ -107,7 +108,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Namespace: Namespace,
Subsystem: replaceStr,
Name: "queue_resource",
- Help: "Queue resource metrics. State of the
resource includes `guaranteed`, `max`, `allocated`, `pending`, `preempting`.",
+ Help: "Queue resource metrics. State of the
resource includes `guaranteed`, `max`, `allocated`, `pending`, `preempting`,
`maxRunningApps`.",
}, []string{"state", "resource"})
var queueMetricsList = []prometheus.Collector{
@@ -354,3 +355,7 @@ func (m *QueueMetrics)
SetQueuePendingResourceMetrics(resourceName string, value
func (m *QueueMetrics) SetQueuePreemptingResourceMetrics(resourceName string,
value float64) {
m.setQueueResource(QueuePreempting, resourceName, value)
}
+
+func (m *QueueMetrics) SetQueueMaxRunningAppsMetrics(value uint64) {
+ m.setQueueResource(QueueMaxRunningApps, "apps", float64(value))
+}
diff --git a/pkg/metrics/queue_test.go b/pkg/metrics/queue_test.go
index 69199f70..ee9a0c93 100644
--- a/pkg/metrics/queue_test.go
+++ b/pkg/metrics/queue_test.go
@@ -246,6 +246,14 @@ func TestQueuePreemptingResourceMetrics(t *testing.T) {
verifyResourceMetrics(t, "preempting", "cpu")
}
+func TestQueueMaxRunningAppsResourceMetrics(t *testing.T) {
+ qm = getQueueMetrics()
+ defer unregisterQueueMetrics()
+
+ qm.SetQueueMaxRunningAppsMetrics(1)
+ verifyResourceMetrics(t, "maxRunningApps", "apps")
+}
+
func TestRemoveQueueMetrics(t *testing.T) {
testQueueName := "root.test"
qm = GetQueueMetrics(testQueueName)
diff --git a/pkg/scheduler/objects/queue.go b/pkg/scheduler/objects/queue.go
index 6394bc04..5252ba70 100644
--- a/pkg/scheduler/objects/queue.go
+++ b/pkg/scheduler/objects/queue.go
@@ -125,6 +125,7 @@ func NewConfiguredQueue(conf configs.QueueConfig, parent
*Queue) (*Queue, error)
sq.parent = parent
sq.isManaged = true
sq.maxRunningApps = conf.MaxApplications
+ sq.updateMaxRunningAppsMetrics()
// update the properties
if err := sq.applyConf(conf); err != nil {
@@ -223,6 +224,7 @@ func (sq *Queue) applyTemplate(childTemplate
*template.Template) {
// update metrics for guaranteed and max resource
sq.updateGuaranteedResourceMetrics()
sq.updateMaxResourceMetrics()
+ sq.updateMaxRunningAppsMetrics()
}
// getProperties returns a copy of the properties for this queue
@@ -366,6 +368,7 @@ func (sq *Queue) applyConf(conf configs.QueueConfig) error {
return err
}
sq.maxRunningApps = conf.MaxApplications
+ sq.updateMaxRunningAppsMetrics()
}
sq.properties = conf.Properties
@@ -462,6 +465,7 @@ func (sq *Queue) SetMaxRunningApps(maxApps uint64) {
sq.Lock()
defer sq.Unlock()
sq.maxRunningApps = maxApps
+ sq.updateMaxRunningAppsMetrics()
}
// setTemplate sets the template on the queue based on the config.
@@ -1705,6 +1709,10 @@ func (sq *Queue) updatePreemptingResourceMetrics() {
}
}
+func (sq *Queue) updateMaxRunningAppsMetrics() {
+
metrics.GetQueueMetrics(sq.QueuePath).SetQueueMaxRunningAppsMetrics(sq.maxRunningApps)
+}
+
func (sq *Queue) removeMetrics() {
metrics.RemoveQueueMetrics(sq.QueuePath)
}
diff --git a/pkg/scheduler/objects/queue_test.go
b/pkg/scheduler/objects/queue_test.go
index f2f24296..edfaf985 100644
--- a/pkg/scheduler/objects/queue_test.go
+++ b/pkg/scheduler/objects/queue_test.go
@@ -298,9 +298,11 @@ func TestPendingCalc(t *testing.T) {
want := concatQueueResourceMetric(metrics, []string{`
yunikorn_root_queue_resource{resource="memory",state="pending"} 100
yunikorn_root_queue_resource{resource="vcores",state="pending"} 10
+yunikorn_root_queue_resource{resource="apps",state="maxRunningApps"} 0
`, `
yunikorn_root_leaf_queue_resource{resource="memory",state="pending"} 100
yunikorn_root_leaf_queue_resource{resource="vcores",state="pending"} 10
+yunikorn_root_leaf_queue_resource{resource="apps",state="maxRunningApps"} 0
`},
)
assert.NilError(t, promtu.GatherAndCompare(prometheus.DefaultGatherer,
strings.NewReader(want), metrics...), "unexpected metrics")
@@ -314,9 +316,11 @@
yunikorn_root_leaf_queue_resource{resource="vcores",state="pending"} 10
want = concatQueueResourceMetric(metrics, []string{`
yunikorn_root_queue_resource{resource="memory",state="pending"} 0
yunikorn_root_queue_resource{resource="vcores",state="pending"} 0
+yunikorn_root_queue_resource{resource="apps",state="maxRunningApps"} 0
`, `
yunikorn_root_leaf_queue_resource{resource="memory",state="pending"} 0
yunikorn_root_leaf_queue_resource{resource="vcores",state="pending"} 0
+yunikorn_root_leaf_queue_resource{resource="apps",state="maxRunningApps"} 0
`},
)
assert.NilError(t, promtu.GatherAndCompare(prometheus.DefaultGatherer,
strings.NewReader(want), metrics...), "unexpected metrics")
@@ -334,16 +338,18 @@
yunikorn_root_leaf_queue_resource{resource="vcores",state="pending"} 0
want = concatQueueResourceMetric(metrics, []string{`
yunikorn_root_queue_resource{resource="memory",state="pending"} 0
yunikorn_root_queue_resource{resource="vcores",state="pending"} 0
+yunikorn_root_queue_resource{resource="apps",state="maxRunningApps"} 0
`, `
yunikorn_root_leaf_queue_resource{resource="memory",state="pending"} 0
yunikorn_root_leaf_queue_resource{resource="vcores",state="pending"} 0
+yunikorn_root_leaf_queue_resource{resource="apps",state="maxRunningApps"} 0
`},
)
assert.NilError(t, promtu.GatherAndCompare(prometheus.DefaultGatherer,
strings.NewReader(want), metrics...), "unexpected metrics")
}
const (
- QueueResourceMetricHelp = "# HELP %v Queue resource metrics. State of
the resource includes `guaranteed`, `max`, `allocated`, `pending`,
`preempting`."
+ QueueResourceMetricHelp = "# HELP %v Queue resource metrics. State of
the resource includes `guaranteed`, `max`, `allocated`, `pending`,
`preempting`, `maxRunningApps`."
QueueResourceMetricType = "# TYPE %v gauge"
)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]