Skip to content

[FLINK-40641][metrics] Cover the Prometheus reporter exposition contract - #29178

Open
MartijnVisser wants to merge 4 commits into
apache:masterfrom
MartijnVisser:FLINK-40641-exposition-contract
Open

MartijnVisser wants to merge 4 commits into
apache:masterfrom
MartijnVisser:FLINK-40641-exposition-contract

Conversation

@MartijnVisser

Copy link
Copy Markdown
Contributor

What is the purpose of the change

  • Add tests that pin what the Prometheus reporter exposes today, so that FLINK-29623 can show what bumping the client changes for users

The current tests don't check the Content-Type, don't send an Accept header, and don't cover what the push gateway receives.

No production code is changed and no dependency is added.

Brief change log

  • Added PrometheusExpositionContractTest for the names, types, labels and values a user scrapes
  • Added PrometheusReservedNameTest for the names a summary occupies, over every reserved suffix
  • Added PrometheusHttpSurfaceTest for the paths served and the Content-Type per Accept header
  • Added PrometheusPushGatewayWireTest for the push and delete requests

Verifying this change

This change added tests and can be verified as follows:

  • mvn verify -pl flink-metrics/flink-metrics-prometheus -Dprometheus.version=0.16.0 replays these tests against the candidate client. Five fail: two where a _created name collides with a summary and one of the pair is dropped, two where the client answers OpenMetrics, and one where an unmatched path stops serving metrics

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): no
  • The public API, i.e., is any changed class annotated with @Public(Evolving): no
  • The serializers: no
  • The runtime per-record code paths (performance sensitive): no
  • Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: no
  • The S3 file system connector: no

Documentation

  • Does this pull request introduce a new feature? no
  • If yes, how is the feature documented? not applicable

Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

Generated-by: Claude Code (Claude Opus 5)

…us reporter

No existing test asserts what a family does not contain, so the missing `_sum`
and the Meter's missing count were uncovered. `TestHistogram` has a minimum of 7
and a maximum of 6, so a coherent one is added.

Generated-by: Claude Code (Claude Opus 5)
…heus reporter

A summary occupies more names than its own, and which ones is a property of the
client. When that set grows a metric stops being exported and we only log a
warning.

Generated-by: Claude Code (Claude Opus 5)
…f the Prometheus reporter

Today only `/metrics` is scraped, so the root going unserved would go
unnoticed, and no test sends an `Accept` header. A real Prometheus server asks
for OpenMetrics.

Generated-by: Claude Code (Claude Opus 5)
FLINK-40592 covers the Authorization header, and with it the method and job
path. This covers the encoding, body, content type, shutdown and failure. A path
prefix in `hostUrl` is preserved.

Generated-by: Claude Code (Claude Opus 5)
@flinkbot

flinkbot commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator

CI report:

Bot commands The @flinkbot bot supports the following commands:
  • @flinkbot run azure re-run the last Azure build

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants