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/16 09:15:15 UTC
(yunikorn-core) branch master updated: [YUNIKORN-3511] Update go compiler and net/x/http for CVE fixes (#1194)
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 048abb81 [YUNIKORN-3511] Update go compiler and net/x/http for CVE fixes (#1194)
048abb81 is described below
commit 048abb81c372910237980d90919f1903eabaaf2f
Author: Wilfred Spiegelenburg <wi...@apache.org>
AuthorDate: Fri Oct 16 14:44:36 2026 +0530
[YUNIKORN-3511] Update go compiler and net/x/http for CVE fixes (#1194)
Compiler version update and net/x/http covering the following CVEs:
* CVE-2026-97032
* CVE-2026-78659
* CVE-2026-97031
* CVE-2026-94440
* CVE-2026-56866
* CVE-2026-94439
* CVE-2026-78669
* CVE-2026-56857
* CVE-2026-78667
* CVE-2026-78663
Update golangci-lint for Go 1.27
Fix for newly detected lint issues, excluding most of the test code to
reduce the code churn.
Update linter to 2.14.0
The typecheck fails with: export data version 5 is greater than maximum
supported version 4
Upgrading seems to solve the issue.
Closes: #1194
Signed-off-by: mani <ma...@gmail.com>
---
.go_version | 2 +-
.golangci.yml | 3 +
Makefile | 2 +-
go.mod | 8 +-
go.sum | 16 +--
pkg/common/resources/resources_test.go | 2 +-
pkg/common/resources/tracked_resources.go | 2 +-
.../security/usergroup_ldap_resolver_test.go | 2 +-
pkg/metrics/init.go | 4 +
pkg/metrics/queue.go | 8 +-
pkg/metrics/queue_test.go | 6 +-
pkg/metrics/scheduler.go | 10 +-
pkg/metrics/scheduler_test.go | 32 ++---
pkg/scheduler/placement/fixed_rule.go | 6 +-
pkg/scheduler/placement/fixed_rule_test.go | 10 +-
pkg/scheduler/placement/placement.go | 5 +
pkg/scheduler/placement/placement_test.go | 2 +-
pkg/scheduler/placement/provided_rule.go | 2 +-
pkg/scheduler/placement/provided_rule_test.go | 6 +-
pkg/scheduler/placement/tag_rule.go | 2 +-
pkg/scheduler/placement/tag_rule_test.go | 8 +-
pkg/scheduler/placement/testrule.go | 2 +-
pkg/scheduler/placement/user_rule.go | 2 +-
pkg/scheduler/placement/user_rule_test.go | 6 +-
pkg/scheduler/ugm/queue_tracker.go | 6 +-
pkg/webservice/routes.go | 156 +++++++++++----------
26 files changed, 164 insertions(+), 146 deletions(-)
diff --git a/.go_version b/.go_version
index 24cffb85..b0c101e6 100644
--- a/.go_version
+++ b/.go_version
@@ -1 +1 @@
-1.26
+1.27
diff --git a/.golangci.yml b/.golangci.yml
index 39d1ecb5..faba5f53 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -31,6 +31,9 @@ linters:
govet:
enable:
- shadow
+ goconst:
+ min-occurrences: 5
+ ignore-tests: true
funlen:
lines: 120
statements: 80
diff --git a/Makefile b/Makefile
index be9e1acc..175ba2e9 100644
--- a/Makefile
+++ b/Makefile
@@ -102,7 +102,7 @@ endif
endif
# golangci-lint
-GOLANGCI_LINT_VERSION=2.10.1
+GOLANGCI_LINT_VERSION=2.14.0
GOLANGCI_LINT_PATH=${TOOLS_DIR}/golangci-lint-v$(GOLANGCI_LINT_VERSION)
GOLANGCI_LINT_BIN=$(GOLANGCI_LINT_PATH)/golangci-lint
GOLANGCI_LINT_ARCHIVEBASE=golangci-lint-$(GOLANGCI_LINT_VERSION)-$(OS)-$(EXEC_ARCH)
diff --git a/go.mod b/go.mod
index c2da526c..0b66b7cc 100644
--- a/go.mod
+++ b/go.mod
@@ -51,10 +51,10 @@ require (
github.com/petermattis/goid v0.0.0-20260725062400-500c67a39b75 // indirect
github.com/prometheus/procfs v0.21.1 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.57.0 // indirect
- golang.org/x/net v0.59.0 // indirect
- golang.org/x/sys v0.48.0 // indirect
- golang.org/x/text v0.42.0 // indirect
+ golang.org/x/crypto v0.58.0 // indirect
+ golang.org/x/net v0.61.0 // indirect
+ golang.org/x/sys v0.49.0 // indirect
+ golang.org/x/text v0.43.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260918162117-cecb64721679 // indirect
google.golang.org/protobuf v1.36.12 // indirect
)
diff --git a/go.sum b/go.sum
index b6accd16..d07076f8 100644
--- a/go.sum
+++ b/go.sum
@@ -73,16 +73,16 @@ go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ=
go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw=
go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
-golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M=
-golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA=
+golang.org/x/crypto v0.58.0 h1:COkYLr4k7nDI4r6QtMML2AfzeIswWHAJthLS6K/M/54=
+golang.org/x/crypto v0.58.0/go.mod h1:Xh+kl5A+M0gMiWDytH2Hhr5Z7WbNCpv/eB/EFgfSk+w=
golang.org/x/exp v0.0.0-20260727155853-b88d891fe743 h1:ex206bKw+v3K0dm3andkrIF+ijyQKJG1pLgwQ2PYdQM=
golang.org/x/exp v0.0.0-20260727155853-b88d891fe743/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q=
-golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues=
-golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg=
-golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
-golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
-golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI=
-golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E=
+golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw=
+golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI=
+golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA=
+golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
+golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc=
+golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
diff --git a/pkg/common/resources/resources_test.go b/pkg/common/resources/resources_test.go
index 24baf4fa..9aa50162 100644
--- a/pkg/common/resources/resources_test.go
+++ b/pkg/common/resources/resources_test.go
@@ -2466,7 +2466,7 @@ func TestResource_Prune(t *testing.T) {
original := NewResourceFromMap(tt.input)
original.Prune()
assert.Equal(t, len(tt.output), len(original.Resources), "unexpected resource types returned")
- assert.Assert(t, maps.Equal(original.Resources, tt.output), "resource type maps are not equal")
+ assert.Assert(t, maps.Equal(original.Resources, tt.output), "resource type maps are not equal") //nolint: govet
})
}
}
diff --git a/pkg/common/resources/tracked_resources.go b/pkg/common/resources/tracked_resources.go
index f5cbd09d..1fd68b68 100644
--- a/pkg/common/resources/tracked_resources.go
+++ b/pkg/common/resources/tracked_resources.go
@@ -120,7 +120,7 @@ func (tr *TrackedResource) EqualsDAO(right map[string]map[string]int64) bool {
for k, v := range tr.TrackedResourceMap {
if inner, ok := right[k]; !ok {
return false
- } else if !maps.Equal(v.DAOMap(), inner) {
+ } else if !maps.Equal(v.DAOMap(), inner) { //nolint: govet
return false
}
}
diff --git a/pkg/common/security/usergroup_ldap_resolver_test.go b/pkg/common/security/usergroup_ldap_resolver_test.go
index a9995ad8..f4e39f49 100644
--- a/pkg/common/security/usergroup_ldap_resolver_test.go
+++ b/pkg/common/security/usergroup_ldap_resolver_test.go
@@ -352,7 +352,7 @@ func TestLDAPLookupGroupIds(t *testing.T) {
lu.access = newMockLdapAccess(mockResult, nil)
groups, err := lu.LDAPLookupGroupIds(u)
assert.NilError(t, err)
- assert.Assert(t, slices.Equal(groups, tt.groups), "group slices are not equal")
+ assert.Assert(t, slices.Equal(groups, tt.groups), "group slices are not equal") //nolint: govet
})
}
diff --git a/pkg/metrics/init.go b/pkg/metrics/init.go
index 18b4a2e4..6fa34e39 100644
--- a/pkg/metrics/init.go
+++ b/pkg/metrics/init.go
@@ -33,6 +33,10 @@ const (
EventSubsystem = "event"
// MetricNameInvalidByteReplacement byte used to replace invalid bytes in prometheus metric names
MetricNameInvalidByteReplacement = '_'
+
+ StateLabel = "state"
+ LevelLabel = "level"
+ ResultLabel = "result"
)
var once sync.Once
diff --git a/pkg/metrics/queue.go b/pkg/metrics/queue.go
index 5c32a1cd..646ea238 100644
--- a/pkg/metrics/queue.go
+++ b/pkg/metrics/queue.go
@@ -77,7 +77,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Name: "queue_app",
ConstLabels: prometheus.Labels{"queue": name},
Help: "Queue application metrics. State of the application includes `new`, `accepted`, `rejected`, `running`, `failing`, `failed`, `resuming`, `completing`, `completed`, `revived`.",
- }, []string{"state"})
+ }, []string{StateLabel})
q.containerMetrics = prometheus.NewCounterVec(
prometheus.CounterOpts{
@@ -85,7 +85,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Subsystem: replaceStr,
Name: "queue_container",
Help: "Queue container metrics. State of the attempt includes `allocated`, `released`.",
- }, []string{"state"})
+ }, []string{StateLabel})
q.resourceMetricsLabel = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
@@ -93,7 +93,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Name: "queue_resource",
ConstLabels: prometheus.Labels{"queue": name},
Help: "Queue resource metrics. State of the resource includes `guaranteed`, `max`, `allocated`, `pending`, `preempting`, `maxRunningApps`.",
- }, []string{"state", "resource"})
+ }, []string{StateLabel, "resource"})
q.appTerminalMetrics = prometheus.NewCounterVec(
prometheus.CounterOpts{
@@ -101,7 +101,7 @@ func InitQueueMetrics(name string) *QueueMetrics {
Name: "queue_app_total",
ConstLabels: prometheus.Labels{"queue": name},
Help: "Total number of applications that reached a terminal state. State includes `completed`, `failed`, `rejected`.",
- }, []string{"state"})
+ }, []string{StateLabel})
var queueMetricsList = []prometheus.Collector{
q.appMetrics,
diff --git a/pkg/metrics/queue_test.go b/pkg/metrics/queue_test.go
index 84cc46b8..d820f47e 100644
--- a/pkg/metrics/queue_test.go
+++ b/pkg/metrics/queue_test.go
@@ -302,7 +302,7 @@ func verifyAppMetrics(t *testing.T, expectedState string) {
assert.Equal(t, 2, len(labels))
assert.Equal(t, "queue", *labels[0].Name)
assert.Equal(t, "root.test", *labels[0].Value)
- assert.Equal(t, "state", *labels[1].Name)
+ assert.Equal(t, StateLabel, *labels[1].Name)
assert.Equal(t, expectedState, *labels[1].Value)
}
@@ -320,7 +320,7 @@ func verifyContainerMetrics(t *testing.T, expectedState string, value float64) {
assert.Equal(t, dto.MetricType_COUNTER, metric.GetType())
m := metric.Metric[0]
assert.Equal(t, 1, len(m.Label))
- assert.Equal(t, "state", *m.Label[0].Name)
+ assert.Equal(t, StateLabel, *m.Label[0].Name)
assert.Equal(t, expectedState, *m.Label[0].Value)
assert.Assert(t, m.Counter != nil)
assert.Equal(t, value, *m.Counter.Value)
@@ -342,7 +342,7 @@ func verifyResourceMetricsLabel(t *testing.T, expectedState, expectedResource st
assert.Equal(t, "root.test", *labels[0].Value)
assert.Equal(t, "resource", *labels[1].Name)
assert.Equal(t, expectedResource, *labels[1].Value)
- assert.Equal(t, "state", *labels[2].Name)
+ assert.Equal(t, StateLabel, *labels[2].Name)
assert.Equal(t, expectedState, *labels[2].Value)
}
diff --git a/pkg/metrics/scheduler.go b/pkg/metrics/scheduler.go
index ac9de124..cff7226a 100644
--- a/pkg/metrics/scheduler.go
+++ b/pkg/metrics/scheduler.go
@@ -84,7 +84,7 @@ func InitSchedulerMetrics() *SchedulerMetrics {
Subsystem: SchedulerSubsystem,
Name: "container_allocation_attempt_total",
Help: "Total number of attempts to allocate containers. State of the attempt includes `allocated`, `rejected`, `error`, `released`",
- }, []string{"state"})
+ }, []string{StateLabel})
s.applicationSubmission = prometheus.NewCounterVec(
prometheus.CounterOpts{
@@ -92,7 +92,7 @@ func InitSchedulerMetrics() *SchedulerMetrics {
Subsystem: SchedulerSubsystem,
Name: "application_submission_total",
Help: "Total number of application submissions. State of the attempt includes `new`, `accepted` and `rejected`.",
- }, []string{"result"})
+ }, []string{ResultLabel})
s.application = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
@@ -100,7 +100,7 @@ func InitSchedulerMetrics() *SchedulerMetrics {
Subsystem: SchedulerSubsystem,
Name: "application_total",
Help: "Total number of applications. State of the application includes `running`, `resuming`, `failing`, `completing`, `completed` and `failed`.",
- }, []string{"state"})
+ }, []string{StateLabel})
s.node = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
@@ -108,7 +108,7 @@ func InitSchedulerMetrics() *SchedulerMetrics {
Subsystem: SchedulerSubsystem,
Name: "node",
Help: "Total number of nodes. State of the node includes `active` and `failed`.",
- }, []string{"state"})
+ }, []string{StateLabel})
s.schedulingLatency = prometheus.NewHistogram(
prometheus.HistogramOpts{
@@ -137,7 +137,7 @@ func InitSchedulerMetrics() *SchedulerMetrics {
Name: "node_sorting_latency_milliseconds",
Help: "Latency of all nodes sorting, in seconds.",
Buckets: prometheus.ExponentialBuckets(0.0001, 10, 8), // start from 0.1ms
- }, []string{"level"})
+ }, []string{LevelLabel})
s.tryNodeLatency = prometheus.NewHistogram(
prometheus.HistogramOpts{
diff --git a/pkg/metrics/scheduler_test.go b/pkg/metrics/scheduler_test.go
index 0dde612c..c7f942cd 100644
--- a/pkg/metrics/scheduler_test.go
+++ b/pkg/metrics/scheduler_test.go
@@ -38,10 +38,10 @@ func TestDrainingNodes(t *testing.T) {
defer unregisterMetrics()
sm.IncDrainingNodes()
- verifyMetric(t, 1, "draining", "yunikorn_scheduler_node", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "draining", "yunikorn_scheduler_node", dto.MetricType_GAUGE, StateLabel)
sm.DecDrainingNodes()
- verifyMetric(t, 0, "draining", "yunikorn_scheduler_node", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "draining", "yunikorn_scheduler_node", dto.MetricType_GAUGE, StateLabel)
}
func TestTotalDecommissionedNodes(t *testing.T) {
@@ -49,7 +49,7 @@ func TestTotalDecommissionedNodes(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalDecommissionedNodes()
- verifyMetric(t, 1, "decommissioned", "yunikorn_scheduler_node", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "decommissioned", "yunikorn_scheduler_node", dto.MetricType_GAUGE, StateLabel)
}
func TestTryPreemptionLatency(t *testing.T) {
@@ -101,14 +101,14 @@ func TestSchedulerApplicationsRunning(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsRunning()
- verifyMetric(t, 1, "running", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "running", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err := sm.GetTotalApplicationsRunning()
assert.NilError(t, err)
assert.Equal(t, curr, 1)
sm.DecTotalApplicationsRunning()
- verifyMetric(t, 0, "running", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "running", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
}
func TestSchedulerApplicationsCompleting(t *testing.T) {
@@ -116,10 +116,10 @@ func TestSchedulerApplicationsCompleting(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsCompleting()
- verifyMetric(t, 1, "completing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "completing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
sm.DecTotalApplicationsCompleting()
- verifyMetric(t, 0, "completing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "completing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
}
func TestSchedulerApplicationsResuming(t *testing.T) {
@@ -127,14 +127,14 @@ func TestSchedulerApplicationsResuming(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsResuming()
- verifyMetric(t, 1, "resuming", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "resuming", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err := sm.GetTotalApplicationsResuming()
assert.NilError(t, err)
assert.Equal(t, curr, 1)
sm.DecTotalApplicationsResuming()
- verifyMetric(t, 0, "resuming", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "resuming", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
}
func TestSchedulerApplicationsFailing(t *testing.T) {
@@ -142,10 +142,10 @@ func TestSchedulerApplicationsFailing(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsFailing()
- verifyMetric(t, 1, "failing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "failing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
sm.DecTotalApplicationsFailing()
- verifyMetric(t, 0, "failing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "failing", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
}
func TestSchedulerApplicationsCompleted(t *testing.T) {
@@ -153,14 +153,14 @@ func TestSchedulerApplicationsCompleted(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsCompleted()
- verifyMetric(t, 1, "completed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "completed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err := sm.GetTotalApplicationsCompleted()
assert.NilError(t, err)
assert.Equal(t, curr, 1)
sm.DecTotalApplicationsCompleted()
- verifyMetric(t, 0, "completed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "completed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err = sm.GetTotalApplicationsCompleted()
assert.NilError(t, err)
@@ -172,14 +172,14 @@ func TestSchedulerApplicationsRevived(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsRevived()
- verifyMetric(t, 1, "revived", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "revived", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err := sm.GetTotalApplicationsRevived()
assert.NilError(t, err)
assert.Equal(t, curr, 1)
sm.DecTotalApplicationsRevived()
- verifyMetric(t, 0, "revived", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 0, "revived", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
curr, err = sm.GetTotalApplicationsRevived()
assert.NilError(t, err)
@@ -191,7 +191,7 @@ func TestSchedulerApplicationsFailed(t *testing.T) {
defer unregisterMetrics()
sm.IncTotalApplicationsFailed()
- verifyMetric(t, 1, "failed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, "state")
+ verifyMetric(t, 1, "failed", "yunikorn_scheduler_application_total", dto.MetricType_GAUGE, StateLabel)
}
func TestSchedulingCycle(t *testing.T) {
diff --git a/pkg/scheduler/placement/fixed_rule.go b/pkg/scheduler/placement/fixed_rule.go
index a12e021c..7946f01d 100644
--- a/pkg/scheduler/placement/fixed_rule.go
+++ b/pkg/scheduler/placement/fixed_rule.go
@@ -54,9 +54,9 @@ func (fr *fixedRule) ruleDAO() *dao.RuleDAO {
return &dao.RuleDAO{
Name: fr.getName(),
Parameters: map[string]string{
- "queue": fr.queue,
- "create": strconv.FormatBool(fr.create),
- "qualified": strconv.FormatBool(fr.qualified),
+ "queue": fr.queue,
+ create: strconv.FormatBool(fr.create),
+ qualified: strconv.FormatBool(fr.qualified),
},
ParentRule: pDAO,
Filter: fr.filter.filterDAO(),
diff --git a/pkg/scheduler/placement/fixed_rule_test.go b/pkg/scheduler/placement/fixed_rule_test.go
index 078d3bc3..738f7c99 100644
--- a/pkg/scheduler/placement/fixed_rule_test.go
+++ b/pkg/scheduler/placement/fixed_rule_test.go
@@ -273,22 +273,22 @@ func Test_fixedRule_ruleDAO(t *testing.T) {
{
"base",
configs.PlacementRule{Name: "fixed", Value: "default"},
- &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", "qualified": "false", "create": "false"}},
+ &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", qualified: "false", create: "false"}},
},
{
- "qualified",
+ qualified,
configs.PlacementRule{Name: "fixed", Value: "root.default"},
- &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "root.default", "qualified": "true", "create": "false"}},
+ &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "root.default", qualified: "true", create: "false"}},
},
{
"parent",
configs.PlacementRule{Name: "fixed", Value: "default", Create: true, Parent: &configs.PlacementRule{Name: "test", Create: true}},
- &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", "qualified": "false", "create": "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{"create": "true"}}},
+ &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", qualified: "false", create: "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{create: "true"}}},
},
{
"filter",
configs.PlacementRule{Name: "fixed", Value: "default", Create: true, Filter: configs.Filter{Type: filterAllow, Groups: []string{"group1", "group2"}}},
- &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", "qualified": "false", "create": "true"}, Filter: &dao.FilterDAO{Type: filterAllow, GroupList: []string{"group1", "group2"}}},
+ &dao.RuleDAO{Name: "fixed", Parameters: map[string]string{"queue": "default", qualified: "false", create: "true"}, Filter: &dao.FilterDAO{Type: filterAllow, GroupList: []string{"group1", "group2"}}},
},
}
for _, tt := range tests {
diff --git a/pkg/scheduler/placement/placement.go b/pkg/scheduler/placement/placement.go
index dd18b29f..b9007c1e 100644
--- a/pkg/scheduler/placement/placement.go
+++ b/pkg/scheduler/placement/placement.go
@@ -33,6 +33,11 @@ import (
"github.com/apache/yunikorn-core/pkg/webservice/dao"
)
+const (
+ create = "create"
+ qualified = "qualified"
+)
+
// ErrorRejected is the standard error returned if placement has failed
var ErrorRejected = errors.New("application rejected: no placement rule matched")
diff --git a/pkg/scheduler/placement/placement_test.go b/pkg/scheduler/placement/placement_test.go
index a97ab208..2cac1433 100644
--- a/pkg/scheduler/placement/placement_test.go
+++ b/pkg/scheduler/placement/placement_test.go
@@ -399,7 +399,7 @@ partitions:
{"provided not exist", "unknown", "", tags, user},
{"provided parent", "root.parent", "", tags, user},
{"acl deny", "root.acldeny", "", tags, deny},
- {"create", "unknown", "root.namespace", map[string]string{"namespace": "namespace"}, user},
+ {create, "unknown", "root.namespace", map[string]string{"namespace": "namespace"}, user},
{"deny create", "unknown", "", map[string]string{"namespace": "namespace"}, deny},
{"forced exist", providedQ, providedQ, map[string]string{siCommon.AppTagCreateForce: "true"}, user},
{"forced and create", "unknown", "root.namespace", map[string]string{siCommon.AppTagCreateForce: "true", "namespace": "namespace"}, user},
diff --git a/pkg/scheduler/placement/provided_rule.go b/pkg/scheduler/placement/provided_rule.go
index fc911055..6f247a9e 100644
--- a/pkg/scheduler/placement/provided_rule.go
+++ b/pkg/scheduler/placement/provided_rule.go
@@ -52,7 +52,7 @@ func (pr *providedRule) ruleDAO() *dao.RuleDAO {
return &dao.RuleDAO{
Name: pr.getName(),
Parameters: map[string]string{
- "create": strconv.FormatBool(pr.create),
+ create: strconv.FormatBool(pr.create),
},
ParentRule: pDAO,
Filter: pr.filter.filterDAO(),
diff --git a/pkg/scheduler/placement/provided_rule_test.go b/pkg/scheduler/placement/provided_rule_test.go
index b1ef26e0..fbb29ad1 100644
--- a/pkg/scheduler/placement/provided_rule_test.go
+++ b/pkg/scheduler/placement/provided_rule_test.go
@@ -326,17 +326,17 @@ func Test_providedRule_ruleDAO(t *testing.T) {
{
"base",
configs.PlacementRule{Name: "provided"},
- &dao.RuleDAO{Name: "provided", Parameters: map[string]string{"create": "false"}},
+ &dao.RuleDAO{Name: "provided", Parameters: map[string]string{create: "false"}},
},
{
"parent",
configs.PlacementRule{Name: "provided", Create: true, Parent: &configs.PlacementRule{Name: "test", Create: true}},
- &dao.RuleDAO{Name: "provided", Parameters: map[string]string{"create": "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{"create": "true"}}},
+ &dao.RuleDAO{Name: "provided", Parameters: map[string]string{create: "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{create: "true"}}},
},
{
"filter",
configs.PlacementRule{Name: "provided", Create: false, Filter: configs.Filter{Type: filterDeny, Users: []string{"john*"}}},
- &dao.RuleDAO{Name: "provided", Parameters: map[string]string{"create": "false"}, Filter: &dao.FilterDAO{Type: filterDeny, UserExp: "john*"}},
+ &dao.RuleDAO{Name: "provided", Parameters: map[string]string{create: "false"}, Filter: &dao.FilterDAO{Type: filterDeny, UserExp: "john*"}},
},
}
for _, tt := range tests {
diff --git a/pkg/scheduler/placement/tag_rule.go b/pkg/scheduler/placement/tag_rule.go
index 4364548d..3c25138f 100644
--- a/pkg/scheduler/placement/tag_rule.go
+++ b/pkg/scheduler/placement/tag_rule.go
@@ -54,7 +54,7 @@ func (tr *tagRule) ruleDAO() *dao.RuleDAO {
Name: tr.getName(),
Parameters: map[string]string{
"tagName": tr.tagName,
- "create": strconv.FormatBool(tr.create),
+ create: strconv.FormatBool(tr.create),
},
ParentRule: pDAO,
Filter: tr.filter.filterDAO(),
diff --git a/pkg/scheduler/placement/tag_rule_test.go b/pkg/scheduler/placement/tag_rule_test.go
index bf9a56fb..15ad97e5 100644
--- a/pkg/scheduler/placement/tag_rule_test.go
+++ b/pkg/scheduler/placement/tag_rule_test.go
@@ -344,22 +344,22 @@ func Test_tagRule_ruleDAO(t *testing.T) {
{
"base",
configs.PlacementRule{Name: "tag", Value: "namespace"},
- &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "namespace", "create": "false"}},
+ &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "namespace", create: "false"}},
},
{
"mixedcase",
configs.PlacementRule{Name: "tag", Value: "MixedCaseTag"},
- &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "mixedcasetag", "create": "false"}},
+ &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "mixedcasetag", create: "false"}},
},
{
"parent",
configs.PlacementRule{Name: "tag", Value: "one", Create: true, Parent: &configs.PlacementRule{Name: "test", Create: true}},
- &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "one", "create": "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{"create": "true"}}},
+ &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "one", create: "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{create: "true"}}},
},
{
"filter",
configs.PlacementRule{Name: "tag", Value: "two", Create: true, Filter: configs.Filter{Type: filterDeny, Groups: []string{"group[0-9]"}}},
- &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "two", "create": "true"}, Filter: &dao.FilterDAO{Type: filterDeny, GroupExp: "group[0-9]"}},
+ &dao.RuleDAO{Name: "tag", Parameters: map[string]string{"tagName": "two", create: "true"}, Filter: &dao.FilterDAO{Type: filterDeny, GroupExp: "group[0-9]"}},
},
}
for _, tt := range tests {
diff --git a/pkg/scheduler/placement/testrule.go b/pkg/scheduler/placement/testrule.go
index e27a6581..017f098c 100644
--- a/pkg/scheduler/placement/testrule.go
+++ b/pkg/scheduler/placement/testrule.go
@@ -47,7 +47,7 @@ func (tr *testRule) ruleDAO() *dao.RuleDAO {
return &dao.RuleDAO{
Name: types.Test,
Parameters: map[string]string{
- "create": strconv.FormatBool(tr.create),
+ create: strconv.FormatBool(tr.create),
},
ParentRule: pDAO,
Filter: tr.filter.filterDAO(),
diff --git a/pkg/scheduler/placement/user_rule.go b/pkg/scheduler/placement/user_rule.go
index 21ff9b95..a2a90af1 100644
--- a/pkg/scheduler/placement/user_rule.go
+++ b/pkg/scheduler/placement/user_rule.go
@@ -49,7 +49,7 @@ func (ur *userRule) ruleDAO() *dao.RuleDAO {
return &dao.RuleDAO{
Name: ur.getName(),
Parameters: map[string]string{
- "create": strconv.FormatBool(ur.create),
+ create: strconv.FormatBool(ur.create),
},
ParentRule: pDAO,
Filter: ur.filter.filterDAO(),
diff --git a/pkg/scheduler/placement/user_rule_test.go b/pkg/scheduler/placement/user_rule_test.go
index da6b3b93..18e4be6b 100644
--- a/pkg/scheduler/placement/user_rule_test.go
+++ b/pkg/scheduler/placement/user_rule_test.go
@@ -242,17 +242,17 @@ func Test_userRule_ruleDAO(t *testing.T) {
{
"base",
configs.PlacementRule{Name: "user"},
- &dao.RuleDAO{Name: "user", Parameters: map[string]string{"create": "false"}},
+ &dao.RuleDAO{Name: "user", Parameters: map[string]string{create: "false"}},
},
{
"parent",
configs.PlacementRule{Name: "user", Create: true, Parent: &configs.PlacementRule{Name: "test", Create: true}},
- &dao.RuleDAO{Name: "user", Parameters: map[string]string{"create": "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{"create": "true"}}},
+ &dao.RuleDAO{Name: "user", Parameters: map[string]string{create: "true"}, ParentRule: &dao.RuleDAO{Name: "test", Parameters: map[string]string{create: "true"}}},
},
{
"filter",
configs.PlacementRule{Name: "user", Create: true, Filter: configs.Filter{Type: filterDeny, Users: []string{"user"}}},
- &dao.RuleDAO{Name: "user", Parameters: map[string]string{"create": "true"}, Filter: &dao.FilterDAO{Type: filterDeny, UserList: []string{"user"}}},
+ &dao.RuleDAO{Name: "user", Parameters: map[string]string{create: "true"}, Filter: &dao.FilterDAO{Type: filterDeny, UserList: []string{"user"}}},
},
}
for _, tt := range tests {
diff --git a/pkg/scheduler/ugm/queue_tracker.go b/pkg/scheduler/ugm/queue_tracker.go
index 9ce73b2f..7b6c3dbf 100644
--- a/pkg/scheduler/ugm/queue_tracker.go
+++ b/pkg/scheduler/ugm/queue_tracker.go
@@ -272,7 +272,7 @@ func (qt *QueueTracker) getMaxResources() map[string]*resources.Resource {
maxRes := map[string]*resources.Resource{qt.queuePath: qt.maxResources}
for _, cqt := range qt.childQueueTrackers {
childUsage := cqt.getMaxResources()
- maps.Copy(maxRes, childUsage)
+ maps.Copy(maxRes, childUsage) //nolint: govet
}
return maxRes
}
@@ -286,7 +286,7 @@ func (qt *QueueTracker) getMaxApplications() map[string]uint64 {
maxApps := map[string]uint64{qt.queuePath: qt.maxRunningApps}
for _, cqt := range qt.childQueueTrackers {
childApps := cqt.getMaxApplications()
- maps.Copy(maxApps, childApps)
+ maps.Copy(maxApps, childApps) //nolint: govet
}
return maxApps
}
@@ -300,7 +300,7 @@ func (qt *QueueTracker) getUsedResources() map[string]*resources.Resource {
maxRes := map[string]*resources.Resource{qt.queuePath: qt.resourceUsage}
for _, cqt := range qt.childQueueTrackers {
childUsage := cqt.getUsedResources()
- maps.Copy(maxRes, childUsage)
+ maps.Copy(maxRes, childUsage) //nolint: govet
}
return maxRes
}
diff --git a/pkg/webservice/routes.go b/pkg/webservice/routes.go
index b7589a98..60938ca2 100644
--- a/pkg/webservice/routes.go
+++ b/pkg/webservice/routes.go
@@ -32,28 +32,34 @@ type route struct {
type routes []route
+const (
+ clusterRoute = "Cluster"
+ schedulerRoute = "Scheduler"
+ systemRoute = "System"
+)
+
var webRoutes = routes{
// endpoints to retrieve general cluster info
route{
- "Cluster",
- "GET",
+ clusterRoute,
+ http.MethodGet,
"/ws/v1/clusters",
getClusterInfo,
},
route{
- "Cluster",
- "GET",
+ clusterRoute,
+ http.MethodGet,
"/ws/v1/metrics",
getMetrics,
},
route{
- "Cluster",
- "GET",
+ clusterRoute,
+ http.MethodGet,
"/ws/v1/config",
getClusterConfig,
},
route{
- "Cluster",
+ clusterRoute,
"POST",
"/ws/v1/validate-conf",
validateConf,
@@ -61,128 +67,128 @@ var webRoutes = routes{
// endpoints to retrieve general scheduler info
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/history/apps",
getApplicationHistory,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/history/containers",
getContainerHistory,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partitions",
getPartitions,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/placementrules",
getPartitionRules,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/queues",
getPartitionQueues,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/queue/:queue",
getPartitionQueue,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/nodes",
getPartitionNodes,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/node/:node",
getPartitionNode,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/queue/:queue/applications",
getQueueApplications,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/queue/:queue/application/:application",
getApplication,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/application/:application",
getApplication,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/applications/:state",
getPartitionApplicationsByState,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/queue/:queue/applications/:state",
getQueueApplicationsByState,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/usage/users",
getUsersResourceUsage,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/usage/user/:user",
getUserResourceUsage,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/usage/groups",
getGroupsResourceUsage,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/partition/:partition/usage/group/:group",
getGroupResourceUsage,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/events/batch",
getEvents,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/events/stream",
getStream,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/scheduler/healthcheck",
checkHealthStatus,
},
route{
- "Scheduler",
- "GET",
+ schedulerRoute,
+ http.MethodGet,
"/ws/v1/scheduler/node-utilizations",
getNodeUtilisations,
},
@@ -194,80 +200,80 @@ var webRoutes = routes{
// All pprof endpoints provide profiling data in the format expected by the pprof visualization tool.
// We need to explicitly register all handlers as we do not use the DefaultServeMux
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/stack",
HandlerFunc: getStackInfo,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/fullstatedump",
HandlerFunc: getFullStateDump,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/heap",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/threadcreate",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/goroutine",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/allocs",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/block",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/mutex",
HandlerFunc: pprof.Index,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/cmdline",
HandlerFunc: pprof.Cmdline,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/profile",
HandlerFunc: pprof.Profile,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/symbol",
HandlerFunc: pprof.Symbol,
},
route{
- Name: "System",
- Method: "GET",
+ Name: systemRoute,
+ Method: http.MethodGet,
Pattern: "/debug/pprof/trace",
HandlerFunc: pprof.Trace,
},
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@yunikorn.apache.org
For additional commands, e-mail: issues-help@yunikorn.apache.org