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

reschke pushed a commit to branch SLING-12648
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit 430684253330994bf9ca228e56ac349926b64ef8
Author: Julian Reschke <[email protected]>
AuthorDate: Tue Feb 4 16:08:04 2025 +0100

    SLING-12648: MapEntries: factor out vanity path handling - move metrics
---
 .../resourceresolver/impl/mapping/MapEntries.java  | 42 +++++------
 .../impl/mapping/VanityPathMapEntriesTest.java     | 81 ++++++----------------
 2 files changed, 41 insertions(+), 82 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index 7198f74..98da578 100644
--- 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -150,12 +150,6 @@ public class MapEntries implements
 
     private final ReentrantLock initializing = new ReentrantLock();
 
-    private final AtomicLong vanityCounter;
-    private final AtomicLong vanityResourcesOnStartup;
-    private final AtomicLong vanityPathLookups;
-    private final AtomicLong vanityPathBloomNegatives;
-    private final AtomicLong vanityPathBloomFalsePositives;
-
     private AtomicBoolean vanityPathsProcessed = new AtomicBoolean(false);
 
     private final StringInterpolationProvider stringInterpolationProvider;
@@ -189,22 +183,16 @@ public class MapEntries implements
 
         this.registration = registerResourceChangeListener(bundleContext);
 
-        this.vanityCounter = new AtomicLong(0);
-        this.vanityResourcesOnStartup = new AtomicLong(0);
-        this.vanityPathLookups = new AtomicLong(0);
-        this.vanityPathBloomNegatives = new AtomicLong(0);
-        this.vanityPathBloomFalsePositives = new AtomicLong(0);
-
         this.vph = new VanityPathHandler(this.factory);
         this.vph.initializeVanityPaths();
 
         this.metrics = metrics;
         if (metrics.isPresent()) {
-            
this.metrics.get().setNumberOfVanityPathsSupplier(vanityCounter::get);
-            
this.metrics.get().setNumberOfResourcesWithVanityPathsOnStartupSupplier(vanityResourcesOnStartup::get);
-            
this.metrics.get().setNumberOfVanityPathLookupsSupplier(vanityPathLookups::get);
-            
this.metrics.get().setNumberOfVanityPathBloomNegativesSupplier(vanityPathBloomNegatives::get);
-            
this.metrics.get().setNumberOfVanityPathBloomFalsePositivesSupplier(vanityPathBloomFalsePositives::get);
+            
this.metrics.get().setNumberOfVanityPathsSupplier(vph.vanityCounter::get);
+            
this.metrics.get().setNumberOfResourcesWithVanityPathsOnStartupSupplier(vph.vanityResourcesOnStartup::get);
+            
this.metrics.get().setNumberOfVanityPathLookupsSupplier(vph.vanityPathLookups::get);
+            
this.metrics.get().setNumberOfVanityPathBloomNegativesSupplier(vph.vanityPathBloomNegatives::get);
+            
this.metrics.get().setNumberOfVanityPathBloomFalsePositivesSupplier(vph.vanityPathBloomFalsePositives::get);
             
this.metrics.get().setNumberOfResourcesWithAliasedChildrenSupplier(() -> (long) 
aliasMapsMap.size());
             
this.metrics.get().setNumberOfResourcesWithAliasesOnStartupSupplier(aliasResourcesOnStartup::get);
             
this.metrics.get().setNumberOfDetectedConflictingAliasesSupplier(detectedConflictingAliases::get);
@@ -1212,6 +1200,12 @@ public class MapEntries implements
 
     private static final int VANITY_BLOOM_FILTER_MAX_ENTRIES = 10000000;
 
+    private final AtomicLong vanityCounter = new AtomicLong(0);
+    private final AtomicLong vanityResourcesOnStartup = new AtomicLong(0);;
+    private final AtomicLong vanityPathLookups = new AtomicLong(0);;
+    private final AtomicLong vanityPathBloomNegatives = new AtomicLong(0);;
+    private final AtomicLong vanityPathBloomFalsePositives = new 
AtomicLong(0);;
+
     private final MapConfigurationProvider factory;
     private byte[] vanityBloomFilter;
 
@@ -1381,12 +1375,12 @@ public class MapEntries implements
 
         if (initFinished) {
             // total number of lookups after init (and when cache not complete)
-            long current = MapEntries.this.vanityPathLookups.incrementAndGet();
+            long current = this.vanityPathLookups.incrementAndGet();
             if (current >= Long.MAX_VALUE - 100000) {
                 // reset counters when we get close the limit
-                MapEntries.this.vanityPathLookups.set(1);
-                MapEntries.this.vanityPathBloomNegatives.set(0);
-                MapEntries.this.vanityPathBloomFalsePositives.set(0);
+                this.vanityPathLookups.set(1);
+                this.vanityPathBloomNegatives.set(0);
+                this.vanityPathBloomFalsePositives.set(0);
                 log.info("Vanity Path metrics reset to 0");
             }
 
@@ -1396,7 +1390,7 @@ public class MapEntries implements
 
             if (!probablyPresent) {
                 // filtered by Bloom filter
-                MapEntries.this.vanityPathBloomNegatives.incrementAndGet();
+                this.vanityPathBloomNegatives.incrementAndGet();
             }
         }
 
@@ -1425,7 +1419,7 @@ public class MapEntries implements
             }
             if (mapEntries == null && probablyPresent) {
                 // Bloom filter had a false positive
-                
MapEntries.this.vanityPathBloomFalsePositives.incrementAndGet();
+                this.vanityPathBloomFalsePositives.incrementAndGet();
             }
         }
 
@@ -1571,7 +1565,7 @@ public class MapEntries implements
             }
         }
 
-        MapEntries.this.vanityResourcesOnStartup.set(count);
+        this.vanityResourcesOnStartup.set(count);
 
         return targetPaths;
     }
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
index 738efa7..3e1261a 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
@@ -178,6 +178,12 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         waitForBgInit();
     }
 
+    private static AtomicLong getVanityCounter(MapEntries mapEntries) throws 
NoSuchFieldException, IllegalAccessException {
+        Field vanityCounter = 
MapEntries.VanityPathHandler.class.getDeclaredField("vanityCounter");
+        vanityCounter.setAccessible(true);
+        return (AtomicLong) vanityCounter.get(mapEntries.vph);
+    }
+
     @Override
     @After
     public void tearDown() {
@@ -569,10 +575,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         entries = mapEntries.getResolveMaps();
         assertEquals(2, entries.size());
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
 
         //bad vanity
         Resource badVanityPath = mock(Resource.class, "badVanityPath");
@@ -606,8 +609,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         entries = mapEntries.getResolveMaps();
         assertEquals(4, entries.size());
 
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(4, counter.longValue());
+        assertEquals(4, getVanityCounter(mapEntries).longValue());
 
         vanityTargets = (Map<String, List<String>>) field.get(mapEntries);
         assertEquals(2, vanityTargets.size());
@@ -642,10 +644,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         entries = mapEntries.getResolveMaps();
         assertEquals(2, entries.size());
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
 
         //bad vanity
         Resource badVanityPath = mock(Resource.class, "badVanityPath");
@@ -679,8 +678,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         entries = mapEntries.getResolveMaps();
         assertEquals(4, entries.size());
 
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(4, counter.longValue());
+        assertEquals(4, getVanityCounter(mapEntries).longValue());
 
         vanityTargets = (Map<String, List<String>>) field.get(mapEntries);
         assertEquals(2, vanityTargets.size());
@@ -796,10 +794,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
         addResource.invoke(mapEntries, "/justVanityPath", new AtomicBoolean());
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
         assertEquals(2, resolveMapsMap.size());
         assertEquals(1, vanityTargets.size());
         assertNotNull(resolveMapsMap.get("/target/justVanityPath"));
@@ -809,8 +804,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         //remove vanity path
         method1.invoke(mapEntries.vph, "/justVanityPath");
 
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(0, counter.longValue());
+        assertEquals(0, getVanityCounter(mapEntries).longValue());
 
         assertEquals(1, resolveMapsMap.size());
         assertEquals(0, vanityTargets.size());
@@ -933,10 +927,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, "/notExisting");
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(0, counter.longValue());
+        assertEquals(0, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -963,10 +954,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, "/target/justVanityPath");
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(this.isMaxCachedVanityPathEntriesStartup ? 2 : 0, 
counter.longValue());
+        assertEquals(this.isMaxCachedVanityPathEntriesStartup ? 2 : 0, 
getVanityCounter(mapEntries).longValue());
 
         final Resource justVanityPath2 = mock(Resource.class, 
"justVanityPath2");
         
when(resourceResolver.getResource("/justVanityPath2")).thenReturn(justVanityPath2);
@@ -984,8 +972,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
         method.invoke(mapEntries.vph, "/target/justVanityPath");
 
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(this.isMaxCachedVanityPathEntriesStartup ? 4 : 0, 
counter.longValue());
+        assertEquals(this.isMaxCachedVanityPathEntriesStartup ? 4 : 0, 
getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1014,10 +1001,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, "/target/justVanityPath");
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(0, counter.longValue());
+        assertEquals(0, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1045,10 +1029,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, "/content/mypage/en-us-{132");
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(0, counter.longValue());
+        assertEquals(0, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1076,10 +1057,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, "/target/justVanityPath");
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
 
         final Resource justVanityPath2 = mock(Resource.class, 
"justVanityPath2");
         
when(resourceResolver.getResource("/justVanityPath2")).thenReturn(justVanityPath2);
@@ -1096,9 +1074,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         });
 
         method.invoke(mapEntries.vph, "/target/justVanityPath");
-
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1124,10 +1100,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, resourceResolver);
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1152,10 +1125,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         method.setAccessible(true);
         method.invoke(mapEntries.vph, resourceResolver);
 
-        Field vanityCounter = 
MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(2, counter.longValue());
+        assertEquals(2, getVanityCounter(mapEntries).longValue());
     }
 
     @Test
@@ -1197,19 +1167,14 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         entries = mapEntries.getResolveMaps();
         assertEquals(expected, entries.size());
 
-        Field vanityCounter =
-                MapEntries.class.getDeclaredField("vanityCounter");
-        vanityCounter.setAccessible(true);
-        AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(expected, counter.longValue());
+        assertEquals(expected, getVanityCounter(mapEntries).longValue());
 
         method.invoke(mapEntries.vph, "/target/justVanityPath");
 
         entries = mapEntries.getResolveMaps();
         assertEquals(expected, entries.size());
 
-        counter = (AtomicLong) vanityCounter.get(mapEntries);
-        assertEquals(expected, counter.longValue());
+        assertEquals(expected, getVanityCounter(mapEntries).longValue());
     }
 
     @Test

Reply via email to