mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-21 03:16:00 -08:00
Merge pull request #13913 from prometheus/merge-2.51.2-into-main
Merge 2.51.2 into main
This commit is contained in:
commit
2a43026558
|
@ -4,6 +4,12 @@
|
||||||
|
|
||||||
* [CHANGE] TSDB: Fix the predicate checking for blocks which are beyond the retention period to include the ones right at the retention boundary. #9633
|
* [CHANGE] TSDB: Fix the predicate checking for blocks which are beyond the retention period to include the ones right at the retention boundary. #9633
|
||||||
|
|
||||||
|
## 2.51.2 / 2024-04-09
|
||||||
|
|
||||||
|
Bugfix release.
|
||||||
|
|
||||||
|
[BUGFIX] Notifier: could hang when using relabeling on alerts #13861
|
||||||
|
|
||||||
## 2.51.1 / 2024-03-27
|
## 2.51.1 / 2024-03-27
|
||||||
|
|
||||||
Bugfix release.
|
Bugfix release.
|
||||||
|
|
|
@ -471,6 +471,10 @@ func (n *Manager) sendAll(alerts ...*Alert) bool {
|
||||||
numSuccess atomic.Uint64
|
numSuccess atomic.Uint64
|
||||||
)
|
)
|
||||||
for _, ams := range amSets {
|
for _, ams := range amSets {
|
||||||
|
if len(ams.ams) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
payload []byte
|
payload []byte
|
||||||
err error
|
err error
|
||||||
|
@ -482,6 +486,7 @@ func (n *Manager) sendAll(alerts ...*Alert) bool {
|
||||||
if len(ams.cfg.AlertRelabelConfigs) > 0 {
|
if len(ams.cfg.AlertRelabelConfigs) > 0 {
|
||||||
amAlerts = relabelAlerts(ams.cfg.AlertRelabelConfigs, labels.Labels{}, alerts)
|
amAlerts = relabelAlerts(ams.cfg.AlertRelabelConfigs, labels.Labels{}, alerts)
|
||||||
if len(amAlerts) == 0 {
|
if len(amAlerts) == 0 {
|
||||||
|
ams.mtx.RUnlock()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// We can't use the cached values from previous iteration.
|
// We can't use the cached values from previous iteration.
|
||||||
|
|
|
@ -219,17 +219,19 @@ func TestHandlerSendAllRemapPerAm(t *testing.T) {
|
||||||
errc = make(chan error, 1)
|
errc = make(chan error, 1)
|
||||||
expected1 = make([]*Alert, 0, maxBatchSize)
|
expected1 = make([]*Alert, 0, maxBatchSize)
|
||||||
expected2 = make([]*Alert, 0, maxBatchSize)
|
expected2 = make([]*Alert, 0, maxBatchSize)
|
||||||
|
expected3 = make([]*Alert, 0)
|
||||||
|
|
||||||
status1, status2 atomic.Int32
|
statusOK atomic.Int32
|
||||||
)
|
)
|
||||||
status1.Store(int32(http.StatusOK))
|
statusOK.Store(int32(http.StatusOK))
|
||||||
status2.Store(int32(http.StatusOK))
|
|
||||||
|
|
||||||
server1 := newTestHTTPServerBuilder(&expected1, errc, "", "", &status1)
|
server1 := newTestHTTPServerBuilder(&expected1, errc, "", "", &statusOK)
|
||||||
server2 := newTestHTTPServerBuilder(&expected2, errc, "", "", &status2)
|
server2 := newTestHTTPServerBuilder(&expected2, errc, "", "", &statusOK)
|
||||||
|
server3 := newTestHTTPServerBuilder(&expected3, errc, "", "", &statusOK)
|
||||||
|
|
||||||
defer server1.Close()
|
defer server1.Close()
|
||||||
defer server2.Close()
|
defer server2.Close()
|
||||||
|
defer server3.Close()
|
||||||
|
|
||||||
h := NewManager(&Options{}, nil)
|
h := NewManager(&Options{}, nil)
|
||||||
h.alertmanagers = make(map[string]*alertmanagerSet)
|
h.alertmanagers = make(map[string]*alertmanagerSet)
|
||||||
|
@ -247,38 +249,68 @@ func TestHandlerSendAllRemapPerAm(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
h.alertmanagers["1"] = &alertmanagerSet{
|
am3Cfg := config.DefaultAlertmanagerConfig
|
||||||
ams: []alertmanager{
|
am3Cfg.Timeout = model.Duration(time.Second)
|
||||||
alertmanagerMock{
|
am3Cfg.AlertRelabelConfigs = []*relabel.Config{
|
||||||
urlf: func() string { return server1.URL },
|
{
|
||||||
},
|
SourceLabels: model.LabelNames{"alertname"},
|
||||||
|
Action: "drop",
|
||||||
|
Regex: relabel.MustNewRegexp(".+"),
|
||||||
},
|
},
|
||||||
cfg: &am1Cfg,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h.alertmanagers["2"] = &alertmanagerSet{
|
h.alertmanagers = map[string]*alertmanagerSet{
|
||||||
ams: []alertmanager{
|
// Drop no alerts.
|
||||||
alertmanagerMock{
|
"1": {
|
||||||
urlf: func() string { return server2.URL },
|
ams: []alertmanager{
|
||||||
|
alertmanagerMock{
|
||||||
|
urlf: func() string { return server1.URL },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
cfg: &am1Cfg,
|
||||||
|
},
|
||||||
|
// Drop only alerts with the "alertnamedrop" label.
|
||||||
|
"2": {
|
||||||
|
ams: []alertmanager{
|
||||||
|
alertmanagerMock{
|
||||||
|
urlf: func() string { return server2.URL },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cfg: &am2Cfg,
|
||||||
|
},
|
||||||
|
// Drop all alerts.
|
||||||
|
"3": {
|
||||||
|
ams: []alertmanager{
|
||||||
|
alertmanagerMock{
|
||||||
|
urlf: func() string { return server3.URL },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cfg: &am3Cfg,
|
||||||
|
},
|
||||||
|
// Empty list of Alertmanager endpoints.
|
||||||
|
"4": {
|
||||||
|
ams: []alertmanager{},
|
||||||
|
cfg: &config.DefaultAlertmanagerConfig,
|
||||||
},
|
},
|
||||||
cfg: &am2Cfg,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range make([]struct{}, maxBatchSize/2) {
|
for i := range make([]struct{}, maxBatchSize/2) {
|
||||||
h.queue = append(h.queue, &Alert{
|
h.queue = append(h.queue,
|
||||||
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
&Alert{
|
||||||
})
|
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
||||||
h.queue = append(h.queue, &Alert{
|
},
|
||||||
Labels: labels.FromStrings("alertnamedrop", fmt.Sprintf("%d", i)),
|
&Alert{
|
||||||
})
|
Labels: labels.FromStrings("alertname", "test", "alertnamedrop", fmt.Sprintf("%d", i)),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
expected1 = append(expected1, &Alert{
|
expected1 = append(expected1,
|
||||||
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
&Alert{
|
||||||
})
|
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
||||||
expected1 = append(expected1, &Alert{
|
}, &Alert{
|
||||||
Labels: labels.FromStrings("alertnamedrop", fmt.Sprintf("%d", i)),
|
Labels: labels.FromStrings("alertname", "test", "alertnamedrop", fmt.Sprintf("%d", i)),
|
||||||
})
|
},
|
||||||
|
)
|
||||||
|
|
||||||
expected2 = append(expected2, &Alert{
|
expected2 = append(expected2, &Alert{
|
||||||
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
Labels: labels.FromStrings("alertname", fmt.Sprintf("%d", i)),
|
||||||
|
@ -296,6 +328,13 @@ func TestHandlerSendAllRemapPerAm(t *testing.T) {
|
||||||
|
|
||||||
require.True(t, h.sendAll(h.queue...), "all sends failed unexpectedly")
|
require.True(t, h.sendAll(h.queue...), "all sends failed unexpectedly")
|
||||||
checkNoErr()
|
checkNoErr()
|
||||||
|
|
||||||
|
// Verify that individual locks are released.
|
||||||
|
for k := range h.alertmanagers {
|
||||||
|
h.alertmanagers[k].mtx.Lock()
|
||||||
|
h.alertmanagers[k].ams = nil
|
||||||
|
h.alertmanagers[k].mtx.Unlock()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCustomDo(t *testing.T) {
|
func TestCustomDo(t *testing.T) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/codemirror-promql",
|
"name": "@prometheus-io/codemirror-promql",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"description": "a CodeMirror mode for the PromQL language",
|
"description": "a CodeMirror mode for the PromQL language",
|
||||||
"types": "dist/esm/index.d.ts",
|
"types": "dist/esm/index.d.ts",
|
||||||
"module": "dist/esm/index.js",
|
"module": "dist/esm/index.js",
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
|
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prometheus-io/lezer-promql": "0.51.1",
|
"@prometheus-io/lezer-promql": "0.51.2",
|
||||||
"lru-cache": "^7.18.3"
|
"lru-cache": "^7.18.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/lezer-promql",
|
"name": "@prometheus-io/lezer-promql",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"description": "lezer-based PromQL grammar",
|
"description": "lezer-based PromQL grammar",
|
||||||
"main": "dist/index.cjs",
|
"main": "dist/index.cjs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
14
web/ui/package-lock.json
generated
14
web/ui/package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "prometheus-io",
|
"name": "prometheus-io",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "prometheus-io",
|
"name": "prometheus-io",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"react-app",
|
"react-app",
|
||||||
"module/*"
|
"module/*"
|
||||||
|
@ -30,10 +30,10 @@
|
||||||
},
|
},
|
||||||
"module/codemirror-promql": {
|
"module/codemirror-promql": {
|
||||||
"name": "@prometheus-io/codemirror-promql",
|
"name": "@prometheus-io/codemirror-promql",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prometheus-io/lezer-promql": "0.51.1",
|
"@prometheus-io/lezer-promql": "0.51.2",
|
||||||
"lru-cache": "^7.18.3"
|
"lru-cache": "^7.18.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
},
|
},
|
||||||
"module/lezer-promql": {
|
"module/lezer-promql": {
|
||||||
"name": "@prometheus-io/lezer-promql",
|
"name": "@prometheus-io/lezer-promql",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@lezer/generator": "^1.5.1",
|
"@lezer/generator": "^1.5.1",
|
||||||
|
@ -19233,7 +19233,7 @@
|
||||||
},
|
},
|
||||||
"react-app": {
|
"react-app": {
|
||||||
"name": "@prometheus-io/app",
|
"name": "@prometheus-io/app",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.11.1",
|
"@codemirror/autocomplete": "^6.11.1",
|
||||||
"@codemirror/commands": "^6.3.2",
|
"@codemirror/commands": "^6.3.2",
|
||||||
|
@ -19251,7 +19251,7 @@
|
||||||
"@lezer/lr": "^1.3.14",
|
"@lezer/lr": "^1.3.14",
|
||||||
"@nexucis/fuzzy": "^0.4.1",
|
"@nexucis/fuzzy": "^0.4.1",
|
||||||
"@nexucis/kvsearch": "^0.8.1",
|
"@nexucis/kvsearch": "^0.8.1",
|
||||||
"@prometheus-io/codemirror-promql": "0.51.1",
|
"@prometheus-io/codemirror-promql": "0.51.2",
|
||||||
"bootstrap": "^4.6.2",
|
"bootstrap": "^4.6.2",
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"downshift": "^7.6.2",
|
"downshift": "^7.6.2",
|
||||||
|
|
|
@ -28,5 +28,5 @@
|
||||||
"ts-jest": "^29.1.1",
|
"ts-jest": "^29.1.1",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^4.9.5"
|
||||||
},
|
},
|
||||||
"version": "0.51.1"
|
"version": "0.51.2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/app",
|
"name": "@prometheus-io/app",
|
||||||
"version": "0.51.1",
|
"version": "0.51.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.11.1",
|
"@codemirror/autocomplete": "^6.11.1",
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
"@lezer/lr": "^1.3.14",
|
"@lezer/lr": "^1.3.14",
|
||||||
"@nexucis/fuzzy": "^0.4.1",
|
"@nexucis/fuzzy": "^0.4.1",
|
||||||
"@nexucis/kvsearch": "^0.8.1",
|
"@nexucis/kvsearch": "^0.8.1",
|
||||||
"@prometheus-io/codemirror-promql": "0.51.1",
|
"@prometheus-io/codemirror-promql": "0.51.2",
|
||||||
"bootstrap": "^4.6.2",
|
"bootstrap": "^4.6.2",
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"downshift": "^7.6.2",
|
"downshift": "^7.6.2",
|
||||||
|
|
Loading…
Reference in a new issue