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]

Reply via email to