Skip to content

feat: add micrometer compatibility workflow - #1

Closed
zeitlinger wants to merge 11 commits into
fix/legacy-gauge-family-namefrom
feat/micrometer-compat-task
Closed

feat: add micrometer compatibility workflow#1
zeitlinger wants to merge 11 commits into
fix/legacy-gauge-family-namefrom
feat/micrometer-compat-task

Conversation

@zeitlinger

@zeitlinger zeitlinger commented May 5, 2026

Copy link
Copy Markdown
Owner

Summary

Adds the Micrometer compatibility workflow and task tooling that were split out
of prometheus#2093.

This branch is intentionally stacked on top of the extracted prom-side fix:
prometheus#2100

What changed

  • Add downstream Micrometer compatibility tasks and workflow so this class of
    regression is exercised automatically against Micrometer
  • Support fork-based compatibility testing
  • Derive the Micrometer test version from the pom instead of duplicating it
  • Pin the downstream Micrometer target to an immutable commit SHA so PR CI is
    deterministic

Related Micrometer work

While debugging the suffix regression, we also found a separate Micrometer
adapter bug: registration-time collision detection needed snapshot-derived
MultiCollector metadata.

That fix lives on the downstream Micrometer branch used by the compatibility
job. The coverage added here is regression protection; the prom-side bug fix is
in prometheus#2100.

Related

Testing

  • mise run build
  • mise run lint
zeitlinger added 8 commits May 5, 2026 15:03
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
@zeitlinger
zeitlinger force-pushed the fix/legacy-gauge-family-name branch from 0eea3c1 to 74917b8 Compare May 8, 2026 07:36
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
…at-task

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
zeitlinger added a commit to prometheus/client_java that referenced this pull request May 13, 2026
Fixes #2095

## Summary

Restores OM1/protobuf compatibility for dotted gauge names after
`feat: move suffix handling to scrape time (#1955)`.

The bug was that non-OpenMetrics exposition changed visible output for
gauge
names that merely ended in suffix-like dotted strings such as `.created`
and
`.total`.

Examples:

- `Gauge("test3.created")` regressed from `test3` to `test3_created`
- `Gauge("test6.total")` regressed from `test6` to `test6_total`

This PR restores the legacy OM1/protobuf behavior while keeping
OpenMetrics on
literal-name handling.

This is the extracted prom-side fix from #2093. The Micrometer workflow
and
related downstream testing were split into a stacked follow-up PR so
this can
merge independently.

## What changed

- Fix OM1 text exposition for dotted gauge names ending in `.created`
and
  `.total`
- Fix protobuf exposition for the same compatibility cases
- Add regression tests that cover the restored OM1/protobuf behavior and
the
  preserved OpenMetrics behavior
- Clean up protobuf family-name resolution so legacy gauge handling
lives in
  one path instead of pre-rewriting metadata objects

## Follow-up stacked PR

- Micrometer workflow/task split:
zeitlinger#1

## Related

- Replaces: #2093
- Issue: #2095

## Testing

- `mise run build`
- `mise run lint`
- `./mvnw test -pl
prometheus-metrics-exposition-textformats,prometheus-metrics-exposition-formats
-Dtest=ExpositionFormatsTest,ProtobufExpositionFormatsTest,DuplicateNamesProtobufTest
-Dcoverage.skip=true -Dcheckstyle.skip=true`
zeitlinger added a commit to prometheus/client_java that referenced this pull request May 22, 2026
Draft validation PR for the unmodified Micrometer compatibility story.

This intentionally does **not** depend on #2114. Vanilla Micrometer does
not use
the typed descriptor API and does not implement the #1800 registration
metadata
hooks, so this PR validates the patch-compatible path independently of
typed
descriptors.

This validates upstream `micrometer-metrics/micrometer@main` against:

- current `main`, which already includes #2100 and #2124 (reserved
suffix
  stripping in `PrometheusNaming.sanitizeMetricName()`).
- Micrometer compatibility test tooling/workflow from
zeitlinger#1.

Local validation:

- `mise run lint`
- `MICROMETER_DIR=/tmp/micrometer-compat-vanilla-2124 mise run
micrometer:test`

---------

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Co-authored-by: Jay DeLuca <jaydeluca4@gmail.com>
@zeitlinger
zeitlinger marked this pull request as draft May 27, 2026 07:48
@zeitlinger zeitlinger closed this Jun 1, 2026
jaydeluca pushed a commit to prometheus/client_java that referenced this pull request Jun 4, 2026
Fixes #2095

## Summary

Restores OM1/protobuf compatibility for dotted gauge names after
`feat: move suffix handling to scrape time (#1955)`.

The bug was that non-OpenMetrics exposition changed visible output for
gauge
names that merely ended in suffix-like dotted strings such as `.created`
and
`.total`.

Examples:

- `Gauge("test3.created")` regressed from `test3` to `test3_created`
- `Gauge("test6.total")` regressed from `test6` to `test6_total`

This PR restores the legacy OM1/protobuf behavior while keeping
OpenMetrics on
literal-name handling.

This is the extracted prom-side fix from #2093. The Micrometer workflow
and
related downstream testing were split into a stacked follow-up PR so
this can
merge independently.

## What changed

- Fix OM1 text exposition for dotted gauge names ending in `.created`
and
  `.total`
- Fix protobuf exposition for the same compatibility cases
- Add regression tests that cover the restored OM1/protobuf behavior and
the
  preserved OpenMetrics behavior
- Clean up protobuf family-name resolution so legacy gauge handling
lives in
  one path instead of pre-rewriting metadata objects

## Follow-up stacked PR

- Micrometer workflow/task split:
zeitlinger#1

## Related

- Replaces: #2093
- Issue: #2095

## Testing

- `mise run build`
- `mise run lint`
- `./mvnw test -pl
prometheus-metrics-exposition-textformats,prometheus-metrics-exposition-formats
-Dtest=ExpositionFormatsTest,ProtobufExpositionFormatsTest,DuplicateNamesProtobufTest
-Dcoverage.skip=true -Dcheckstyle.skip=true`

Signed-off-by: Jay DeLuca <jaydeluca4@gmail.com>
jaydeluca added a commit to prometheus/client_java that referenced this pull request Jun 4, 2026
Draft validation PR for the unmodified Micrometer compatibility story.

This intentionally does **not** depend on #2114. Vanilla Micrometer does
not use
the typed descriptor API and does not implement the #1800 registration
metadata
hooks, so this PR validates the patch-compatible path independently of
typed
descriptors.

This validates upstream `micrometer-metrics/micrometer@main` against:

- current `main`, which already includes #2100 and #2124 (reserved
suffix
  stripping in `PrometheusNaming.sanitizeMetricName()`).
- Micrometer compatibility test tooling/workflow from
zeitlinger#1.

Local validation:

- `mise run lint`
- `MICROMETER_DIR=/tmp/micrometer-compat-vanilla-2124 mise run
micrometer:test`

---------

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Co-authored-by: Jay DeLuca <jaydeluca4@gmail.com>
Signed-off-by: Jay DeLuca <jaydeluca4@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant