This is an automated email from the ASF dual-hosted git repository. joerghoh pushed a commit to branch SLING-12369 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-models-impl.git
commit 9b1b84dadbdb1b93fd5848e81599aa471784b4fc Author: Joerg Hoh <[email protected]> AuthorDate: Fri Jul 5 17:30:36 2024 +0200 SLING-12369 add metric to report the number of entries in the requestDisposalCallbacks map --- pom.xml | 10 ++++++++-- .../java/org/apache/sling/models/impl/ModelAdapterFactory.java | 10 ++++++++++ .../java/org/apache/sling/models/impl/AdapterFactoryTest.java | 2 ++ .../sling/models/impl/StaticInjectionAPFLoadOrderTest.java | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c9e6be9..8cad0af 100644 --- a/pom.xml +++ b/pom.xml @@ -198,6 +198,12 @@ <artifactId>annotations</artifactId> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.commons.metrics</artifactId> + <version>1.2.12</version> + <scope>provided</scope> + </dependency> <!-- Test dependencies --> <dependency> <groupId>junit</groupId> @@ -233,14 +239,14 @@ <version>1.4.2</version> <scope>test</scope> </dependency> - <!-- transitive depedendencies of org.apache.sling.servlet-helpers --> + <!-- transitive depedendencies of org.apache.sling.servlet-helpers --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> <scope>test</scope> </dependency> - <!-- for testing the annotations --> + <!-- for testing the annotations --> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.util.converter</artifactId> diff --git a/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java b/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java index 9724013..ce1893d 100644 --- a/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java +++ b/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java @@ -36,6 +36,8 @@ import org.apache.sling.api.adapter.Adaptable; import org.apache.sling.api.adapter.AdapterFactory; import org.apache.sling.api.adapter.AdapterManager; import org.apache.sling.api.resource.Resource; +import org.apache.sling.commons.metrics.Gauge; +import org.apache.sling.commons.metrics.MetricsService; import org.apache.sling.commons.osgi.RankedServices; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.ValidationStrategy; @@ -186,6 +188,9 @@ public class ModelAdapterFactory implements AdapterFactory, Runnable, ModelFacto private ConcurrentMap<java.lang.ref.Reference<Object>, Disposable> disposalCallbacks; private RequestDisposalCallbacks requestDisposalCallbacks; + + // exposes the number of elements in the RequestDisposableCallback's map + Gauge<Integer> requestsPendingCleanup; @Override public void run() { @@ -230,6 +235,9 @@ public class ModelAdapterFactory implements AdapterFactory, Runnable, ModelFacto @Reference AdapterManager adapterManager; + + @Reference + MetricsService metricsService; ModelPackageBundleListener listener; @@ -1179,6 +1187,8 @@ public class ModelAdapterFactory implements AdapterFactory, Runnable, ModelFacto this.configPrinterRegistration = bundleContext.registerService(Object.class, new ModelConfigurationPrinter(this, bundleContext, adapterImplementations), printerProps); + + requestsPendingCleanup = metricsService.gauge("org.apache.sling.models.ModelAdapterFactory.requestsPendingCleanup", requestDisposalCallbacks.callbacks::size); } diff --git a/src/test/java/org/apache/sling/models/impl/AdapterFactoryTest.java b/src/test/java/org/apache/sling/models/impl/AdapterFactoryTest.java index 8b20b31..ad4842e 100644 --- a/src/test/java/org/apache/sling/models/impl/AdapterFactoryTest.java +++ b/src/test/java/org/apache/sling/models/impl/AdapterFactoryTest.java @@ -28,6 +28,7 @@ import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.wrappers.ValueMapDecorator; +import org.apache.sling.commons.metrics.MetricsService; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.Self; import org.apache.sling.models.export.spi.ModelExporter; @@ -81,6 +82,7 @@ public class AdapterFactoryTest { Converter c = Converters.standardConverter(); Map<String, String> map = new HashMap<>(); ModelAdapterFactoryConfiguration config = c.convert(map).to(ModelAdapterFactoryConfiguration.class); + factory.metricsService = Mockito.mock(MetricsService.class); factory.activate(componentCtx, config); factory.injectAnnotationProcessorFactories = Collections.emptyList(); factory.injectAnnotationProcessorFactories2 = Collections.emptyList(); diff --git a/src/test/java/org/apache/sling/models/impl/StaticInjectionAPFLoadOrderTest.java b/src/test/java/org/apache/sling/models/impl/StaticInjectionAPFLoadOrderTest.java index 24bcb63..637ffa6 100644 --- a/src/test/java/org/apache/sling/models/impl/StaticInjectionAPFLoadOrderTest.java +++ b/src/test/java/org/apache/sling/models/impl/StaticInjectionAPFLoadOrderTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.when; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.adapter.AdapterManager; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.commons.metrics.MetricsService; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy; import org.apache.sling.models.annotations.injectorspecific.SlingObject; @@ -37,6 +38,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; /** @@ -123,6 +125,7 @@ public class StaticInjectionAPFLoadOrderTest { private void registerServices() { context.registerService(BindingsValuesProvidersByContext.class, bindingsValuesProvidersByContext); context.registerService(AdapterManager.class, adapterManager); + context.registerService(MetricsService.class,Mockito.mock(MetricsService.class)); factory = context.registerInjectActivateService(new ModelAdapterFactory()); }
