From 7a92230652a83f1b745f2d0a586037e4428b15e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Fri, 2 May 2025 19:25:54 +0200 Subject: [PATCH 1/6] Prepare release 3.4.0-rc.0 (#16517) Co-authored-by: Ayoub Mrini --- CHANGELOG.md | 19 ++++++++++++++++--- RELEASE.md | 2 +- VERSION | 2 +- web/ui/mantine-ui/package.json | 4 ++-- web/ui/module/codemirror-promql/package.json | 4 ++-- web/ui/module/lezer-promql/package.json | 2 +- web/ui/package-lock.json | 10 +++++----- web/ui/package.json | 2 +- 8 files changed, 29 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7354cc3956..524e996aa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,25 @@ # Changelog -## unreleased +## 3.4.0-rc.0 / 2025-04-29 -* [CHANGE] Make setting out-of-order native histograms feature (`--enable-feature=ooo-native-histograms`) a no-op. Out-of-order native histograms are now always enabled when `out_of_order_time_window` is greater than zero and `--enable-feature=native-histograms` is set. #16207 +* [CHANGE] Config: Make setting out-of-order native histograms feature (`--enable-feature=ooo-native-histograms`) a no-op. Out-of-order native histograms are now always enabled when `out_of_order_time_window` is greater than zero and `--enable-feature=native-histograms` is set. #16207 * [FEATURE] OTLP translate: Add feature flag for optionally translating OTel explicit bucket histograms into native histograms with custom buckets. #15850 * [FEATURE] OTLP translate: Add option to receive OTLP metrics without translating names or attributes. #16441 +* [FEATURE] PromQL: allow arithmetic operations in durations in PromQL parser. #16249 +* [FEATURE] OTLP receiver: Add primitive support for ingesting OTLP delta metrics as-is. #16360 +* [ENHANCEMENT] PromQL: histogram_fraction for bucket histograms. #16095 * [ENHANCEMENT] TSDB: add `prometheus_tsdb_wal_replay_unknown_refs_total` and `prometheus_tsdb_wbl_replay_unknown_refs_total` metrics to track unknown series references during WAL/WBL replay. #16166 -* [BUGFIX] TSDB: fix unknown series errors and possible lost data during WAL replay when series are removed from the head due to inactivity and reappear before the next WAL checkpoint. #16060 +* [ENHANCEMENT] Scraping: Add config option for escaping scheme request. #16066 +* [ENHANCEMENT] Config: Add global config option for convert_classic_histograms_to_nhcb. #16226 +* [ENHANCEMENT] Alerting: make batch size configurable (`--alertmanager.notification-batch-size`). #16254 +* [PERF] Kubernetes SD: make endpointSlice discovery more efficient. #16433 +* [BUGFIX] Config: Fix auto-reload on changes to rule and scrape config files. #16340 +* [BUGFIX] Scraping: Skip native histogram series if ingestion is disabled. #16218 +* [BUGFIX] TSDB: Handle metadata/tombstones/exemplars for duplicate series during WAL replay. #16231 +* [BUGFIX] TSDB: Avoid processing exemplars outside the valid time range during WAL replay. #16242 +* [BUGFIX] Promtool: Add feature flags for PromQL features. #16443 +* [BUGFIX] Rules: correct logging of alert name & template data. #15093 +* [BUGFIX] PromQL: Use arithmetic mean for `histogram_stddev()` and `histogram_stdvar()` . #16444 ## 3.3.0 / 2025-04-15 diff --git a/RELEASE.md b/RELEASE.md index 28abb5be0f..782b290244 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -13,7 +13,7 @@ Please see [the v2.55 RELEASE.md](https://github.com/prometheus/prometheus/blob/ | v3.1 | 2024-12-17 | Bryan Boreham (GitHub: @bboreham) | | v3.2 | 2025-01-28 | Jan Fajerski (GitHub: @jan--f) | | v3.3 | 2025-03-11 | Ayoub Mrini (Github: @machine424) | -| v3.4 | 2025-04-22 | Jan-Otto Kröpke (Github: @jkroepke)| +| v3.4 | 2025-04-29 | Jan-Otto Kröpke (Github: @jkroepke)| | v3.5 | 2025-06-03 | **volunteer welcome** | If you are interested in volunteering please create a pull request against the [prometheus/prometheus](https://github.com/prometheus/prometheus) repository and propose yourself for the release series of your choice. diff --git a/VERSION b/VERSION index 15a2799817..f8c49c90d1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.3.0 +3.4.0-rc.0 diff --git a/web/ui/mantine-ui/package.json b/web/ui/mantine-ui/package.json index 15ac1fa5ed..617cfbe898 100644 --- a/web/ui/mantine-ui/package.json +++ b/web/ui/mantine-ui/package.json @@ -1,7 +1,7 @@ { "name": "@prometheus-io/mantine-ui", "private": true, - "version": "0.303.0", + "version": "0.304.0-rc.0", "type": "module", "scripts": { "start": "vite", @@ -28,7 +28,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.303.0", + "@prometheus-io/codemirror-promql": "0.304.0-rc.0", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", diff --git a/web/ui/module/codemirror-promql/package.json b/web/ui/module/codemirror-promql/package.json index aa4749c10c..bfaa688b64 100644 --- a/web/ui/module/codemirror-promql/package.json +++ b/web/ui/module/codemirror-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/codemirror-promql", - "version": "0.303.0", + "version": "0.304.0-rc.0", "description": "a CodeMirror mode for the PromQL language", "types": "dist/esm/index.d.ts", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md", "dependencies": { - "@prometheus-io/lezer-promql": "0.303.0", + "@prometheus-io/lezer-promql": "0.304.0-rc.0", "lru-cache": "^11.1.0" }, "devDependencies": { diff --git a/web/ui/module/lezer-promql/package.json b/web/ui/module/lezer-promql/package.json index de48707ab0..04ff0590e2 100644 --- a/web/ui/module/lezer-promql/package.json +++ b/web/ui/module/lezer-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/lezer-promql", - "version": "0.303.0", + "version": "0.304.0-rc.0", "description": "lezer-based PromQL grammar", "main": "dist/index.cjs", "type": "module", diff --git a/web/ui/package-lock.json b/web/ui/package-lock.json index c5d674ea5a..b99c491648 100644 --- a/web/ui/package-lock.json +++ b/web/ui/package-lock.json @@ -24,7 +24,7 @@ }, "mantine-ui": { "name": "@prometheus-io/mantine-ui", - "version": "0.303.0", + "version": "0.304.0-rc.0", "dependencies": { "@codemirror/autocomplete": "^6.18.6", "@codemirror/language": "^6.11.0", @@ -42,7 +42,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.303.0", + "@prometheus-io/codemirror-promql": "0.304.0-rc.0", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", @@ -189,10 +189,10 @@ }, "module/codemirror-promql": { "name": "@prometheus-io/codemirror-promql", - "version": "0.303.0", + "version": "0.304.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@prometheus-io/lezer-promql": "0.303.0", + "@prometheus-io/lezer-promql": "0.304.0-rc.0", "lru-cache": "^11.1.0" }, "devDependencies": { @@ -222,7 +222,7 @@ }, "module/lezer-promql": { "name": "@prometheus-io/lezer-promql", - "version": "0.303.0", + "version": "0.304.0-rc.0", "license": "Apache-2.0", "devDependencies": { "@lezer/generator": "^1.7.3", diff --git a/web/ui/package.json b/web/ui/package.json index 3e61a34821..f56bccaf8d 100644 --- a/web/ui/package.json +++ b/web/ui/package.json @@ -1,7 +1,7 @@ { "name": "prometheus-io", "description": "Monorepo for the Prometheus UI", - "version": "0.303.0", + "version": "0.304.0-rc.0", "private": true, "scripts": { "build": "bash build_ui.sh --all", From 93f7c7821162da2cefa9e5eb8c79c3c72ca182d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Sat, 17 May 2025 08:40:29 +0200 Subject: [PATCH 2/6] Release 3.4.0 (#16600) --- CHANGELOG.md | 2 +- VERSION | 2 +- web/ui/mantine-ui/package.json | 4 ++-- web/ui/module/codemirror-promql/package.json | 4 ++-- web/ui/module/lezer-promql/package.json | 2 +- web/ui/package-lock.json | 10 +++++----- web/ui/package.json | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 524e996aa3..7f01d62f24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 3.4.0-rc.0 / 2025-04-29 +## 3.4.0 / 2025-05-16 * [CHANGE] Config: Make setting out-of-order native histograms feature (`--enable-feature=ooo-native-histograms`) a no-op. Out-of-order native histograms are now always enabled when `out_of_order_time_window` is greater than zero and `--enable-feature=native-histograms` is set. #16207 * [FEATURE] OTLP translate: Add feature flag for optionally translating OTel explicit bucket histograms into native histograms with custom buckets. #15850 diff --git a/VERSION b/VERSION index f8c49c90d1..18091983f5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.4.0-rc.0 +3.4.0 diff --git a/web/ui/mantine-ui/package.json b/web/ui/mantine-ui/package.json index 617cfbe898..c29ba5dada 100644 --- a/web/ui/mantine-ui/package.json +++ b/web/ui/mantine-ui/package.json @@ -1,7 +1,7 @@ { "name": "@prometheus-io/mantine-ui", "private": true, - "version": "0.304.0-rc.0", + "version": "0.304.0", "type": "module", "scripts": { "start": "vite", @@ -28,7 +28,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.304.0-rc.0", + "@prometheus-io/codemirror-promql": "0.304.0", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", diff --git a/web/ui/module/codemirror-promql/package.json b/web/ui/module/codemirror-promql/package.json index bfaa688b64..38aeb96a79 100644 --- a/web/ui/module/codemirror-promql/package.json +++ b/web/ui/module/codemirror-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/codemirror-promql", - "version": "0.304.0-rc.0", + "version": "0.304.0", "description": "a CodeMirror mode for the PromQL language", "types": "dist/esm/index.d.ts", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md", "dependencies": { - "@prometheus-io/lezer-promql": "0.304.0-rc.0", + "@prometheus-io/lezer-promql": "0.304.0", "lru-cache": "^11.1.0" }, "devDependencies": { diff --git a/web/ui/module/lezer-promql/package.json b/web/ui/module/lezer-promql/package.json index 04ff0590e2..dd96ca1f4d 100644 --- a/web/ui/module/lezer-promql/package.json +++ b/web/ui/module/lezer-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/lezer-promql", - "version": "0.304.0-rc.0", + "version": "0.304.0", "description": "lezer-based PromQL grammar", "main": "dist/index.cjs", "type": "module", diff --git a/web/ui/package-lock.json b/web/ui/package-lock.json index b99c491648..2faff6bc28 100644 --- a/web/ui/package-lock.json +++ b/web/ui/package-lock.json @@ -24,7 +24,7 @@ }, "mantine-ui": { "name": "@prometheus-io/mantine-ui", - "version": "0.304.0-rc.0", + "version": "0.304.0", "dependencies": { "@codemirror/autocomplete": "^6.18.6", "@codemirror/language": "^6.11.0", @@ -42,7 +42,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.304.0-rc.0", + "@prometheus-io/codemirror-promql": "0.304.0", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", @@ -189,10 +189,10 @@ }, "module/codemirror-promql": { "name": "@prometheus-io/codemirror-promql", - "version": "0.304.0-rc.0", + "version": "0.304.0", "license": "Apache-2.0", "dependencies": { - "@prometheus-io/lezer-promql": "0.304.0-rc.0", + "@prometheus-io/lezer-promql": "0.304.0", "lru-cache": "^11.1.0" }, "devDependencies": { @@ -222,7 +222,7 @@ }, "module/lezer-promql": { "name": "@prometheus-io/lezer-promql", - "version": "0.304.0-rc.0", + "version": "0.304.0", "license": "Apache-2.0", "devDependencies": { "@lezer/generator": "^1.7.3", diff --git a/web/ui/package.json b/web/ui/package.json index f56bccaf8d..e46fb0971c 100644 --- a/web/ui/package.json +++ b/web/ui/package.json @@ -1,7 +1,7 @@ { "name": "prometheus-io", "description": "Monorepo for the Prometheus UI", - "version": "0.304.0-rc.0", + "version": "0.304.0", "private": true, "scripts": { "build": "bash build_ui.sh --all", From 546b1d242e209ed4228aa01a248dbf3e41e573ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Sat, 17 May 2025 08:47:49 +0200 Subject: [PATCH 3/6] Adjust release date in CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan-Otto Kröpke --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f01d62f24..f37d530e62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## 3.4.0 / 2025-05-16 +## 3.4.0 / 2025-05-17 * [CHANGE] Config: Make setting out-of-order native histograms feature (`--enable-feature=ooo-native-histograms`) a no-op. Out-of-order native histograms are now always enabled when `out_of_order_time_window` is greater than zero and `--enable-feature=native-histograms` is set. #16207 * [FEATURE] OTLP translate: Add feature flag for optionally translating OTel explicit bucket histograms into native histograms with custom buckets. #15850 From 8d9332c19957d2f487829904a1f18cf3ba5d10bc Mon Sep 17 00:00:00 2001 From: dongjiang Date: Sat, 24 May 2025 20:25:39 +0800 Subject: [PATCH 4/6] fix metric_name_escaping_scheme option (#16625) --- docs/configuration/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index db7b307a1e..6fa05b63ed 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -481,7 +481,7 @@ metric_relabel_configs: # Specifies the validation scheme for metric and label names. Either blank or # "utf8" for full UTF-8 support, or "legacy" for letters, numbers, colons, and # underscores. -[ metric_name_validation_scheme | default "utf8" ] +[ metric_name_validation_scheme: | default "utf8" ] # Specifies the character escaping scheme that will be requested when scraping # for metric and label names that do not conform to the legacy Prometheus @@ -497,7 +497,7 @@ metric_relabel_configs: # If this value is left blank, Prometheus will default to `allow-utf-8` if the # validation scheme for the current scrape config is set to utf8, or # `underscores` if the validation scheme is set to `legacy`. -[ metric_name_validation_scheme | default "utf8" ] +[ metric_name_escaping_scheme: | default "allow-utf-8" ] # Limit on total number of positive and negative buckets allowed in a single # native histogram. The resolution of a histogram with more buckets will be From 89a72bf1b506b283beb265bd4050629c788257fc Mon Sep 17 00:00:00 2001 From: Ayoub Mrini Date: Tue, 27 May 2025 16:21:17 +0200 Subject: [PATCH 5/6] [BACKPORT-3.4] fix: add reproducer for a dangling-reference issue in parsers and fix (#16633) --- .github/workflows/ci.yml | 1 + cmd/prometheus/main_test.go | 106 ++++++++++++++++++++++++++++ cmd/prometheus/reload_test.go | 16 +++-- model/textparse/openmetricsparse.go | 4 +- model/textparse/promparse.go | 5 +- 5 files changed, 124 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1f6f22e67..992b9c8220 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,7 @@ jobs: - uses: prometheus/promci@443c7fc2397e946bc9f5029e313a9c3441b9b86d # v0.4.7 - uses: ./.github/promci/actions/setup_environment - run: go test --tags=dedupelabels ./... + - run: go test -race ./cmd/prometheus - run: GOARCH=386 go test ./... - uses: ./.github/promci/actions/check_proto with: diff --git a/cmd/prometheus/main_test.go b/cmd/prometheus/main_test.go index 0d0ab56eb4..3083be841c 100644 --- a/cmd/prometheus/main_test.go +++ b/cmd/prometheus/main_test.go @@ -20,6 +20,7 @@ import ( "fmt" "io" "math" + "net/http" "os" "os/exec" "path/filepath" @@ -33,6 +34,7 @@ import ( "github.com/alecthomas/kingpin/v2" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/common/expfmt" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" @@ -41,6 +43,7 @@ import ( "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/notifier" "github.com/prometheus/prometheus/rules" + "github.com/prometheus/prometheus/util/testutil" ) func init() { @@ -646,3 +649,106 @@ func TestRwProtoMsgFlagParser(t *testing.T) { }) } } + +func getMetricValue(t *testing.T, body io.Reader, metricType model.MetricType, metricName string) (float64, error) { + t.Helper() + + p := expfmt.TextParser{} + metricFamilies, err := p.TextToMetricFamilies(body) + if err != nil { + return 0, err + } + metricFamily, ok := metricFamilies[metricName] + if !ok { + return 0, errors.New("metric family not found") + } + metric := metricFamily.GetMetric() + if len(metric) != 1 { + return 0, errors.New("metric not found") + } + switch metricType { + case model.MetricTypeGauge: + return metric[0].GetGauge().GetValue(), nil + case model.MetricTypeCounter: + return metric[0].GetCounter().GetValue(), nil + default: + t.Fatalf("metric type %s not supported", metricType) + } + + return 0, errors.New("cannot get value") +} + +// TestHeadCompactionWhileScraping verifies that running a head compaction +// concurrently with a scrape does not trigger the data race described in +// https://github.com/prometheus/prometheus/issues/16490. +func TestHeadCompactionWhileScraping(t *testing.T) { + t.Parallel() + + // To increase the chance of reproducing the data race + for i := range 5 { + t.Run(strconv.Itoa(i), func(t *testing.T) { + t.Parallel() + + tmpDir := t.TempDir() + configFile := filepath.Join(tmpDir, "prometheus.yml") + + port := testutil.RandomUnprivilegedPort(t) + config := fmt.Sprintf(` +scrape_configs: + - job_name: 'self1' + scrape_interval: 61ms + static_configs: + - targets: ['localhost:%d'] + - job_name: 'self2' + scrape_interval: 67ms + static_configs: + - targets: ['localhost:%d'] +`, port, port) + os.WriteFile(configFile, []byte(config), 0o777) + + prom := prometheusCommandWithLogging( + t, + configFile, + port, + fmt.Sprintf("--storage.tsdb.path=%s", tmpDir), + "--storage.tsdb.min-block-duration=100ms", + ) + require.NoError(t, prom.Start()) + + require.Eventually(t, func() bool { + r, err := http.Get(fmt.Sprintf("http://127.0.0.1:%d/metrics", port)) + if err != nil { + return false + } + defer r.Body.Close() + if r.StatusCode != http.StatusOK { + return false + } + metrics, err := io.ReadAll(r.Body) + if err != nil { + return false + } + + // Wait for some compactions to run + compactions, err := getMetricValue(t, bytes.NewReader(metrics), model.MetricTypeCounter, "prometheus_tsdb_compactions_total") + if err != nil { + return false + } + if compactions < 3 { + return false + } + + // Sanity check: Some actual scraping was done. + series, err := getMetricValue(t, bytes.NewReader(metrics), model.MetricTypeCounter, "prometheus_tsdb_head_series_created_total") + require.NoError(t, err) + require.NotZero(t, series) + + // No compaction must have failed + failures, err := getMetricValue(t, bytes.NewReader(metrics), model.MetricTypeCounter, "prometheus_tsdb_compactions_failed_total") + require.NoError(t, err) + require.Zero(t, failures) + return true + }, 15*time.Second, 500*time.Millisecond) + }) + } +} diff --git a/cmd/prometheus/reload_test.go b/cmd/prometheus/reload_test.go index 18a7ff2ad1..c59e51b316 100644 --- a/cmd/prometheus/reload_test.go +++ b/cmd/prometheus/reload_test.go @@ -119,7 +119,8 @@ func runTestSteps(t *testing.T, steps []struct { require.NoError(t, os.WriteFile(configFilePath, []byte(steps[0].configText), 0o644), "Failed to write initial config file") port := testutil.RandomUnprivilegedPort(t) - runPrometheusWithLogging(t, configFilePath, port) + prom := prometheusCommandWithLogging(t, configFilePath, port, "--enable-feature=auto-reload-config", "--config.auto-reload-interval=1s") + require.NoError(t, prom.Start()) baseURL := "http://localhost:" + strconv.Itoa(port) require.Eventually(t, func() bool { @@ -197,14 +198,20 @@ func captureLogsToTLog(t *testing.T, r io.Reader) { } } -func runPrometheusWithLogging(t *testing.T, configFilePath string, port int) { +func prometheusCommandWithLogging(t *testing.T, configFilePath string, port int, extraArgs ...string) *exec.Cmd { stdoutPipe, stdoutWriter := io.Pipe() stderrPipe, stderrWriter := io.Pipe() var wg sync.WaitGroup wg.Add(2) - prom := exec.Command(promPath, "-test.main", "--enable-feature=auto-reload-config", "--config.file="+configFilePath, "--config.auto-reload-interval=1s", "--web.listen-address=0.0.0.0:"+strconv.Itoa(port)) + args := []string{ + "-test.main", + "--config.file=" + configFilePath, + "--web.listen-address=0.0.0.0:" + strconv.Itoa(port), + } + args = append(args, extraArgs...) + prom := exec.Command(promPath, args...) prom.Stdout = stdoutWriter prom.Stderr = stderrWriter @@ -224,6 +231,5 @@ func runPrometheusWithLogging(t *testing.T, configFilePath string, port int) { stderrWriter.Close() wg.Wait() }) - - require.NoError(t, prom.Start()) + return prom } diff --git a/model/textparse/openmetricsparse.go b/model/textparse/openmetricsparse.go index 602fe5b5ae..be3ec67cac 100644 --- a/model/textparse/openmetricsparse.go +++ b/model/textparse/openmetricsparse.go @@ -199,7 +199,9 @@ func (p *OpenMetricsParser) Comment() []byte { // Labels writes the labels of the current sample into the passed labels. func (p *OpenMetricsParser) Labels(l *labels.Labels) { - s := yoloString(p.series) + // Defensive copy in case the following keeps a reference. + // See https://github.com/prometheus/prometheus/issues/16490 + s := string(p.series) p.builder.Reset() metricName := unreplace(s[p.offsets[0]-p.start : p.offsets[1]-p.start]) diff --git a/model/textparse/promparse.go b/model/textparse/promparse.go index 4ecd93c37b..c4dcb4aee3 100644 --- a/model/textparse/promparse.go +++ b/model/textparse/promparse.go @@ -225,8 +225,9 @@ func (p *PromParser) Comment() []byte { // Labels writes the labels of the current sample into the passed labels. func (p *PromParser) Labels(l *labels.Labels) { - s := yoloString(p.series) - + // Defensive copy in case the following keeps a reference. + // See https://github.com/prometheus/prometheus/issues/16490 + s := string(p.series) p.builder.Reset() metricName := unreplace(s[p.offsets[0]-p.start : p.offsets[1]-p.start]) p.builder.Add(labels.MetricName, metricName) From aea6503d9bbaad6c5faff3ecf6f1025213356c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Sat, 31 May 2025 08:41:19 +0200 Subject: [PATCH 6/6] Release 3.4.1 (#16652) --- CHANGELOG.md | 4 ++++ VERSION | 2 +- web/ui/mantine-ui/package.json | 4 ++-- web/ui/module/codemirror-promql/package.json | 4 ++-- web/ui/module/lezer-promql/package.json | 2 +- web/ui/package-lock.json | 14 +++++++------- web/ui/package.json | 2 +- 7 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f37d530e62..3411245417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 3.4.1 / 2025-05-31 + +* [BUGFIX] Parser: Add reproducer for a dangling-reference issue in parsers. #16633 + ## 3.4.0 / 2025-05-17 * [CHANGE] Config: Make setting out-of-order native histograms feature (`--enable-feature=ooo-native-histograms`) a no-op. Out-of-order native histograms are now always enabled when `out_of_order_time_window` is greater than zero and `--enable-feature=native-histograms` is set. #16207 diff --git a/VERSION b/VERSION index 18091983f5..47b322c971 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.4.0 +3.4.1 diff --git a/web/ui/mantine-ui/package.json b/web/ui/mantine-ui/package.json index c29ba5dada..1d6b4ac06a 100644 --- a/web/ui/mantine-ui/package.json +++ b/web/ui/mantine-ui/package.json @@ -1,7 +1,7 @@ { "name": "@prometheus-io/mantine-ui", "private": true, - "version": "0.304.0", + "version": "0.304.1", "type": "module", "scripts": { "start": "vite", @@ -28,7 +28,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.304.0", + "@prometheus-io/codemirror-promql": "0.304.1", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", diff --git a/web/ui/module/codemirror-promql/package.json b/web/ui/module/codemirror-promql/package.json index 38aeb96a79..16c23997cd 100644 --- a/web/ui/module/codemirror-promql/package.json +++ b/web/ui/module/codemirror-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/codemirror-promql", - "version": "0.304.0", + "version": "0.304.1", "description": "a CodeMirror mode for the PromQL language", "types": "dist/esm/index.d.ts", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md", "dependencies": { - "@prometheus-io/lezer-promql": "0.304.0", + "@prometheus-io/lezer-promql": "0.304.1", "lru-cache": "^11.1.0" }, "devDependencies": { diff --git a/web/ui/module/lezer-promql/package.json b/web/ui/module/lezer-promql/package.json index dd96ca1f4d..ed3623bd3e 100644 --- a/web/ui/module/lezer-promql/package.json +++ b/web/ui/module/lezer-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/lezer-promql", - "version": "0.304.0", + "version": "0.304.1", "description": "lezer-based PromQL grammar", "main": "dist/index.cjs", "type": "module", diff --git a/web/ui/package-lock.json b/web/ui/package-lock.json index 2faff6bc28..0b5a909427 100644 --- a/web/ui/package-lock.json +++ b/web/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "prometheus-io", - "version": "0.303.0", + "version": "0.304.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "prometheus-io", - "version": "0.303.0", + "version": "0.304.1", "workspaces": [ "mantine-ui", "module/*" @@ -24,7 +24,7 @@ }, "mantine-ui": { "name": "@prometheus-io/mantine-ui", - "version": "0.304.0", + "version": "0.304.1", "dependencies": { "@codemirror/autocomplete": "^6.18.6", "@codemirror/language": "^6.11.0", @@ -42,7 +42,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.304.0", + "@prometheus-io/codemirror-promql": "0.304.1", "@reduxjs/toolkit": "^2.7.0", "@tabler/icons-react": "^3.31.0", "@tanstack/react-query": "^5.74.7", @@ -189,10 +189,10 @@ }, "module/codemirror-promql": { "name": "@prometheus-io/codemirror-promql", - "version": "0.304.0", + "version": "0.304.1", "license": "Apache-2.0", "dependencies": { - "@prometheus-io/lezer-promql": "0.304.0", + "@prometheus-io/lezer-promql": "0.304.1", "lru-cache": "^11.1.0" }, "devDependencies": { @@ -222,7 +222,7 @@ }, "module/lezer-promql": { "name": "@prometheus-io/lezer-promql", - "version": "0.304.0", + "version": "0.304.1", "license": "Apache-2.0", "devDependencies": { "@lezer/generator": "^1.7.3", diff --git a/web/ui/package.json b/web/ui/package.json index e46fb0971c..c9eba3c5f1 100644 --- a/web/ui/package.json +++ b/web/ui/package.json @@ -1,7 +1,7 @@ { "name": "prometheus-io", "description": "Monorepo for the Prometheus UI", - "version": "0.304.0", + "version": "0.304.1", "private": true, "scripts": { "build": "bash build_ui.sh --all",