You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2022/08/30 14:41:15 UTC

[sling-org-apache-sling-graphql-core] branch master updated: SLING-11429 - OSGi configs on same resource type cause IAE

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-graphql-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 5a69ef1  SLING-11429 - OSGi configs on same resource type cause IAE
5a69ef1 is described below

commit 5a69ef1bbd9e0e64ef5da9c268f36fa2a3a0e4f7
Author: Radu Cotescu <17...@users.noreply.github.com>
AuthorDate: Tue Aug 30 16:41:10 2022 +0200

    SLING-11429 - OSGi configs on same resource type cause IAE
    
    * use the GraphQLServlet service.pid in order to have unique
    instances for all the required metrics
---
 pom.xml                                                | 13 +++++--------
 .../sling/graphql/core/servlet/GraphQLServlet.java     | 18 +++++++++++-------
 .../sling/graphql/core/servlet/GraphQLServletTest.java |  4 ++--
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/pom.xml b/pom.xml
index 567ebe4..b0a55c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,14 +52,6 @@
 
   <build>
     <plugins>
-      <plugin>
-        <groupId>biz.aQute.bnd</groupId>
-        <artifactId>bnd-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>biz.aQute.bnd</groupId>
-        <artifactId>bnd-baseline-maven-plugin</artifactId>
-      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-failsafe-plugin</artifactId>
@@ -94,6 +86,11 @@
       <artifactId>osgi.core</artifactId>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component</artifactId>
+      <scope>provided</scope>
+    </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.service.component.annotations</artifactId>
diff --git a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
index 9bba5a8..3e1427e 100644
--- a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
+++ b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
@@ -40,10 +40,13 @@ import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.commons.metrics.Counter;
 import org.apache.sling.commons.metrics.MetricsService;
 import org.apache.sling.commons.metrics.Timer;
+import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.graphql.api.cache.GraphQLCacheProvider;
 import org.apache.sling.graphql.api.engine.QueryExecutor;
 import org.apache.sling.graphql.api.engine.ValidationResult;
 import org.jetbrains.annotations.NotNull;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
@@ -146,11 +149,12 @@ public class GraphQLServlet extends SlingAllMethodsServlet {
     private Counter requestsServed;
     private Timer requestTimer;
 
-    private static final String METRIC_NS = GraphQLServlet.class.getName();
     private String gaugeCacheHitRate;
 
     @Activate
-    private void activate(Config config) {
+    private void activate(Config config, ComponentContext componentContext) {
+        String servicePid = PropertiesUtil.toString(componentContext.getProperties().get(Constants.SERVICE_PID),
+                GraphQLServlet.class.getName());
         String[] extensions = config.sling_servlet_extensions();
         StringBuilder extensionsPattern = new StringBuilder();
         for (String extension : extensions) {
@@ -192,16 +196,16 @@ public class GraphQLServlet extends SlingAllMethodsServlet {
             sb.append(".e:").append(String.join("_", extensions));
         }
         String servletRegistrationProperties = sb.toString();
-        cacheHits = metricsService.counter(METRIC_NS + "." + servletRegistrationProperties + ".cache_hits");
-        cacheMisses = metricsService.counter(METRIC_NS + "." + servletRegistrationProperties + ".cache_misses");
-        requestsServed = metricsService.counter(METRIC_NS + "." + servletRegistrationProperties + ".requests_total");
-        gaugeCacheHitRate = METRIC_NS + "." + servletRegistrationProperties + ".cache_hit_rate";
+        cacheHits = metricsService.counter(servicePid + "." + servletRegistrationProperties + ".cache_hits");
+        cacheMisses = metricsService.counter(servicePid + "." + servletRegistrationProperties + ".cache_misses");
+        requestsServed = metricsService.counter(servicePid + "." + servletRegistrationProperties + ".requests_total");
+        gaugeCacheHitRate = servicePid + "." + servletRegistrationProperties + ".cache_hit_rate";
         metricRegistry.register(gaugeCacheHitRate, (Gauge<Float>) () -> {
             float hitCount = cacheHits.getCount();
             float missCount = cacheMisses.getCount();
             return hitCount > 0 || missCount > 0 ? hitCount / (hitCount + missCount) : 0.0f;
         });
-        requestTimer = metricsService.timer(METRIC_NS + "." + servletRegistrationProperties + ".requests_timer");
+        requestTimer = metricsService.timer(servicePid + "." + servletRegistrationProperties + ".requests_timer");
     }
 
     @Deactivate
diff --git a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
index 39f1f8d..6872daf 100644
--- a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
+++ b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
@@ -148,7 +148,7 @@ public class GraphQLServletTest {
         context.registerInjectActivateService(new GraphQLServlet(), ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES, TEST_RESOURCE_TYPE,
             "persistedQueries.suffix", "");
 
-        String expectedMetricPrefix = "org.apache.sling.graphql.core.servlet.GraphQLServlet.rt:" + TEST_RESOURCE_TYPE + ".m:GET.e:gql";
+        String expectedMetricPrefix = "org.apache.sling.graphql.core.GraphQLServlet.rt:" + TEST_RESOURCE_TYPE + ".m:GET.e:gql";
 
         verify(metricsService).counter(expectedMetricPrefix + ".cache_hits");
         verify(metricsService).counter(expectedMetricPrefix + ".requests_total");
@@ -163,7 +163,7 @@ public class GraphQLServletTest {
             "persistedQueries.suffix", "/persisted");
 
         // test resource type, default method, default extension
-        String expectedMetric = "org.apache.sling.graphql.core.servlet.GraphQLServlet.rt:" + TEST_RESOURCE_TYPE + ".m:GET.e:gql.cache_hit_rate";
+        String expectedMetric = "org.apache.sling.graphql.core.GraphQLServlet.rt:" + TEST_RESOURCE_TYPE + ".m:GET.e:gql.cache_hit_rate";
 
         assertTrue(metricRegistry.getGauges().containsKey(expectedMetric));
         assertEquals(0.0f, metricRegistry.getGauges().get(expectedMetric).getValue());