Skip to content

Make sure MeterBinder and CompositeMeterRegistry registration behavior is consistent #42310

Closed as not planned
@jonatan-ivanov

Description

@jonatan-ivanov

First of all, maybe this is intentional and Boot should do what it does today but maybe the behavior of registering MeterBinder and CompositeMeterRegistry have some inconsistencies (maybe MeterFilter too).

In the latest GA version of Boot (3.3.3), if I create a custom registry bean, let's say a SimpleMeterRegistry in addition to what Boot creates, (let's say PrometheusMeterRegistry), binders are bound once, and the registry that will be injected if I ask for a MeterRegistry is AutoConfiguredCompositeMeterRegistry (what binders bound to).

@Bean
SimpleMeterRegistry simpleMeterRegistry() {
    return new SimpleMeterRegistry();
}

@Bean
MeterBinder debuggingHelperBinder() {
	return registry -> {
		System.out.println("Binder bound to " + registry);
		registry.counter("test").increment();
	};
}

This behavior looks expected to me.

If I also create a CompositeMeterRegistry on top of the previous scenario (so I will have 1. Composite, 2. Simple, 3. Prometheus) Boot will create an AutoConfiguredCompositeMeterRegistry where all three registries are registered (expected) but it will also bind every binders to two registries: to AutoConfiguredCompositeMeterRegistry (expected) and to the CompositeMeterRegistry that I created (unexpected?).

@Bean
SimpleMeterRegistry simpleMeterRegistry() {
	return new SimpleMeterRegistry();
}

@Bean
CompositeMeterRegistry compositeMR() {
	CompositeMeterRegistry compositeMeterRegistry = new CompositeMeterRegistry();
	compositeMeterRegistry.add(new SimpleMeterRegistry());
	return compositeMeterRegistry;
}

@Bean
MeterBinder debuggingHelperBinder() {
	return registry -> {
		System.out.println("Binder bound to " + registry);
		registry.counter("test").increment();
	};
}

This will result in the following structure:

AutoConfiguredCompositeMeterRegistry
    PrometheusMeterRegistry
    SimpleMeterRegistry
    CompositeMeterRegistry
        SimpleMeterRegistry

Should there be two composites or should Boot back off and use the user-created composite to register other registries? If so, should binders be bound to all the composites?

Metadata

Metadata

Assignees

Labels

status: supersededAn issue that has been superseded by another

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions