You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by re...@apache.org on 2025/01/14 12:34:44 UTC
(sling-org-apache-sling-resourceresolver) branch SLING-12615 updated: Resource Resolver: refactor MapEntries - extract vanity path handling - vanityCounter
This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch SLING-12615
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
The following commit(s) were added to refs/heads/SLING-12615 by this push:
new 562276a Resource Resolver: refactor MapEntries - extract vanity path handling - vanityCounter
562276a is described below
commit 562276abd9814639e18b428fb38c6a80588fff94
Author: Julian Reschke <re...@apache.org>
AuthorDate: Tue Jan 14 13:34:35 2025 +0100
Resource Resolver: refactor MapEntries - extract vanity path handling - vanityCounter
---
.../resourceresolver/impl/mapping/MapEntries.java | 16 ++-
.../impl/mapping/VanityPathHandler.java | 12 +++
.../impl/mapping/MapEntriesTest.java | 108 ++++++++++-----------
3 files changed, 69 insertions(+), 67 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 39b860a..55b9151 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
@@ -152,7 +152,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;
@@ -188,7 +187,6 @@ 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);
@@ -200,7 +198,7 @@ public class MapEntries implements
this.metrics = metrics;
if (metrics.isPresent()) {
- this.metrics.get().setNumberOfVanityPathsSupplier(vanityCounter::get);
+ this.metrics.get().setNumberOfVanityPathsSupplier(vanityPathHandler::getTotalCount);
this.metrics.get().setNumberOfResourcesWithVanityPathsOnStartupSupplier(vanityResourcesOnStartup::get);
this.metrics.get().setNumberOfVanityPathLookupsSupplier(vanityPathLookups::get);
this.metrics.get().setNumberOfVanityPathBloomNegativesSupplier(vanityPathBloomNegatives::get);
@@ -570,7 +568,7 @@ public class MapEntries implements
private boolean doAddVanity(final Resource resource) {
log.debug("doAddVanity getting {}", resource.getPath());
- boolean updateTheCache = isAllVanityPathEntriesCached() || vanityCounter.longValue() < this.factory.getMaxCachedVanityPathEntries();
+ boolean updateTheCache = isAllVanityPathEntriesCached() || vanityPathHandler.getTotalCount() < this.factory.getMaxCachedVanityPathEntries();
return null != loadVanityPath(resource, resolveMapsMap, vanityTargets, updateTheCache);
}
@@ -593,8 +591,8 @@ public class MapEntries implements
this.resolveMapsMap.remove(s);
}
}
- if (vanityCounter.longValue() > 0) {
- vanityCounter.addAndGet(-2);
+ if (vanityPathHandler.getTotalCount() > 0) {
+ vanityPathHandler.addToTotalCountAndGet(-2);
}
return true;
}
@@ -985,7 +983,7 @@ public class MapEntries implements
}
if ( isValid ) {
totalValid += 1;
- if (this.vanityPathsProcessed.get() && (this.factory.isMaxCachedVanityPathEntriesStartup() || vanityCounter.longValue() < this.factory.getMaxCachedVanityPathEntries())) {
+ if (this.vanityPathsProcessed.get() && (this.factory.isMaxCachedVanityPathEntriesStartup() || vanityPathHandler.getTotalCount() < this.factory.getMaxCachedVanityPathEntries())) {
loadVanityPath(resource, resolveMapsMap, vanityTargets, true);
entryMap = resolveMapsMap;
} else {
@@ -1358,7 +1356,7 @@ public class MapEntries implements
if (Stream.of(this.factory.getObservationPaths()).anyMatch(path -> path.matches(resourcePath))) {
countInScope += 1;
final boolean addToCache = isAllVanityPathEntriesCached()
- || vanityCounter.longValue() < this.factory.getMaxCachedVanityPathEntries();
+ || vanityPathHandler.getTotalCount() < this.factory.getMaxCachedVanityPathEntries();
loadVanityPath(resource, resolveMapsMap, targetPaths, addToCache);
}
}
@@ -1449,7 +1447,7 @@ public class MapEntries implements
this.updateTargetPaths(targetPaths, redirect, checkPath);
//increment only if the instance variable
if (entryMap == resolveMapsMap) {
- vanityCounter.addAndGet(2);
+ vanityPathHandler.addToTotalCountAndGet(2);
}
this.vanityPathHandler.cacheWillProbablyContain(checkPath);
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathHandler.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathHandler.java
index 5284102..fc94ae9 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathHandler.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathHandler.java
@@ -22,6 +22,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicLong;
/**
* Handles loading and caching of vanity paths.
@@ -39,6 +40,8 @@ public class VanityPathHandler {
private static final String JCR_SYSTEM_PREFIX = "/jcr:system/";
+ private final AtomicLong vanityCounter;
+
/**
* @param factory {@link MapConfigurationProvider}
*/
@@ -46,6 +49,7 @@ public class VanityPathHandler {
this.factory = factory;
this.bloomFilter = BloomFilterUtils.createFilter(VANITY_BLOOM_FILTER_MAX_ENTRIES,
this.factory.getVanityBloomFilterMaxBytes());
+ this.vanityCounter = new AtomicLong(0);
}
/**
@@ -87,4 +91,12 @@ public class VanityPathHandler {
void cacheWillProbablyContain(String path) {
BloomFilterUtils.add(this.bloomFilter, path);
}
+
+ long getTotalCount() {
+ return vanityCounter.get();
+ }
+
+ long addToTotalCountAndGet(long delta) {
+ return vanityCounter.addAndGet(delta);
+ }
}
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
index 0526c16..f0e4185 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
@@ -654,10 +654,10 @@ public class MapEntriesTest 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());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
//bad vanity
Resource badVanityPath = mock(Resource.class, "badVanityPath");
@@ -691,8 +691,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
entries = mapEntries.getResolveMaps();
assertEquals(4, entries.size());
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(4, counter.longValue());
+ assertEquals(4, vph.getTotalCount());
vanityTargets = (Map<String, List<String>>) field.get(mapEntries);
assertEquals(2, vanityTargets.size());
@@ -727,10 +726,10 @@ public class MapEntriesTest 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());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
//bad vanity
Resource badVanityPath = mock(Resource.class, "badVanityPath");
@@ -741,7 +740,6 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
addResource.invoke(mapEntries, "/badVanityPath", new AtomicBoolean());
-
assertEquals(2, entries.size());
vanityTargets = (Map<String, List<String>>) field.get(mapEntries);
@@ -764,8 +762,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
entries = mapEntries.getResolveMaps();
assertEquals(4, entries.size());
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(4, counter.longValue());
+ assertEquals(4, vph.getTotalCount());
vanityTargets = (Map<String, List<String>>) field.get(mapEntries);
assertEquals(2, vanityTargets.size());
@@ -881,10 +878,10 @@ public class MapEntriesTest 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());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
assertEquals(2, resolveMapsMap.size());
assertEquals(1, vanityTargets.size());
assertNotNull(resolveMapsMap.get("/target/justVanityPath"));
@@ -894,8 +891,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
//remove vanity path
method1.invoke(mapEntries, "/justVanityPath");
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(0, counter.longValue());
+ assertEquals(0, vph.getTotalCount());
assertEquals(1, resolveMapsMap.size());
assertEquals(0, vanityTargets.size());
@@ -1912,10 +1908,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, "/notExisting");
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(0, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(0, vph.getTotalCount());
}
@Test
@@ -1947,10 +1943,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, "/target/justVanityPath");
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
final Resource justVanityPath2 = mock(Resource.class, "justVanityPath2");
when(resourceResolver.getResource("/justVanityPath2")).thenReturn(justVanityPath2);
@@ -1972,8 +1968,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.invoke(mapEntries, "/target/justVanityPath");
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(4, counter.longValue());
+ assertEquals(4, vph.getTotalCount());
}
@Test
@@ -2006,10 +2001,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, "/target/justVanityPath");
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(0, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(0, vph.getTotalCount());
}
@Test
@@ -2041,10 +2036,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, "/content/mypage/en-us-{132");
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(0, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(0, vph.getTotalCount());
}
@Test
@@ -2076,10 +2071,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, "/target/justVanityPath");
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
final Resource justVanityPath2 = mock(Resource.class, "justVanityPath2");
when(resourceResolver.getResource("/justVanityPath2")).thenReturn(justVanityPath2);
@@ -2101,8 +2096,7 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.invoke(mapEntries, "/target/justVanityPath");
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ assertEquals(2, vph.getTotalCount());
}
@Test
@@ -2132,10 +2126,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, resourceResolver);
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
}
@Test
@@ -2164,10 +2158,10 @@ public class MapEntriesTest extends AbstractMappingMapEntriesTest {
method.setAccessible(true);
method.invoke(mapEntries, resourceResolver);
- Field vanityCounter = MapEntries.class.getDeclaredField("vanityCounter");
- vanityCounter.setAccessible(true);
- AtomicLong counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
}
@Test
@@ -2213,19 +2207,17 @@ public class MapEntriesTest 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());
+ Field vanityPathHandlerField = MapEntries.class.getDeclaredField("vanityPathHandler");
+ vanityPathHandlerField.setAccessible(true);
+ VanityPathHandler vph = (VanityPathHandler) vanityPathHandlerField.get(mapEntries);
+ assertEquals(2, vph.getTotalCount());
method.invoke(mapEntries, "/target/justVanityPath");
entries = mapEntries.getResolveMaps();
assertEquals(2, entries.size());
- counter = (AtomicLong) vanityCounter.get(mapEntries);
- assertEquals(2, counter.longValue());
+ assertEquals(2, vph.getTotalCount());
}
@Test