This is an automated email from the ASF dual-hosted git repository.
reschke pushed a commit to branch 1.x
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
The following commit(s) were added to refs/heads/1.x by this push:
new ecbbacf6 SLING-12763: cleanup API of AliasHandler wrt 'optimized
resolution' (#173)
ecbbacf6 is described below
commit ecbbacf6e3ac6844a4aa4ff24841a1a6a39a2d58
Author: Julian Reschke <[email protected]>
AuthorDate: Tue Apr 29 15:23:57 2025 +0200
SLING-12763: cleanup API of AliasHandler wrt 'optimized resolution' (#173)
---
.../impl/mapping/AliasHandler.java | 35 ++++++++++++----------
.../resourceresolver/impl/mapping/MapEntries.java | 16 ++++------
.../impl/mapping/AliasMapEntriesTest.java | 7 +++--
3 files changed, 29 insertions(+), 29 deletions(-)
diff --git
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
index 6451d439..8dd3278d 100644
---
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
+++
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
@@ -67,10 +67,14 @@ class AliasHandler {
private final Runnable sendChangeEvent;
/**
- * The key of the map is the parent path, while the value is a map with
the resource name as key and the actual aliases as values
+ * The key of the map is the parent path, while the value is a map with the
+ * resource name as key and the actual aliases as values
*/
+ @NotNull
Map<String, Map<String, Collection<String>>> aliasMapsMap;
+ boolean cacheIsInitialized = false;
+
final AtomicLong aliasResourcesOnStartup;
final AtomicLong detectedConflictingAliases;
final AtomicLong detectedInvalidAliases;
@@ -82,7 +86,7 @@ class AliasHandler {
Runnable sendChangeEvent) {
this.factory = factory;
this.initializing = initializing;
- this.aliasMapsMap = new ConcurrentHashMap<>();
+ this.aliasMapsMap = Map.of();
this.doUpdateConfiguration = doUpdateConfiguration;
this.sendChangeEvent = sendChangeEvent;
@@ -99,27 +103,26 @@ class AliasHandler {
* Actual initializer. Guards itself against concurrent use by using a
* ReentrantLock. Does nothing if the resource resolver has already been
* null-ed.
- *
- * @return true if the optimizedAliasResolution is enabled, false otherwise
*/
- protected boolean initializeAliases() {
+ protected void initializeAliases() {
this.initializing.lock();
try {
+ this.cacheIsInitialized = false;
+
// already disposed?
if (this.factory == null) {
- return false;
+ return;
}
List<String> conflictingAliases = new ArrayList<>();
List<String> invalidAliases = new ArrayList<>();
- boolean isOptimizeAliasResolutionEnabled =
this.factory.isOptimizeAliasResolutionEnabled();
-
// optimization made in SLING-2521
- if (isOptimizeAliasResolutionEnabled) {
+ if (this.factory.isOptimizeAliasResolutionEnabled()) {
try {
this.aliasMapsMap = this.loadAliases(conflictingAliases,
invalidAliases);
+ this.cacheIsInitialized = true;
// warn if there are more than a few defunct aliases
if (conflictingAliases.size() >=
MAX_REPORT_DEFUNCT_ALIASES) {
@@ -130,31 +133,31 @@ class AliasHandler {
} else if (!conflictingAliases.isEmpty()) {
log.warn("There are {} conflicting aliases: {}",
conflictingAliases.size(), conflictingAliases);
}
+
if (invalidAliases.size() >= MAX_REPORT_DEFUNCT_ALIASES) {
log.warn("There are {} invalid aliases; excerpt: {}",
invalidAliases.size(), invalidAliases);
} else if (!invalidAliases.isEmpty()) {
log.warn("There are {} invalid aliases: {}",
invalidAliases.size(), invalidAliases);
}
} catch (final Exception e) {
-
+ // unmodifiable
+ this.aliasMapsMap = Map.of();
logDisableAliasOptimization(e);
-
- // disable optimize alias resolution
- isOptimizeAliasResolutionEnabled = false;
}
}
doUpdateConfiguration.run();
sendChangeEvent.run();
-
- return isOptimizeAliasResolutionEnabled;
-
} finally {
this.initializing.unlock();
}
}
+ boolean usesCache() {
+ return this.cacheIsInitialized;
+ }
+
boolean doAddAlias(final Resource resource) {
return loadAlias(resource, this.aliasMapsMap, null, null);
}
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 0d9d1d10..d8aeadbe 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
@@ -110,8 +110,6 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
private final StringInterpolationProvider stringInterpolationProvider;
- private final boolean useOptimizeAliasResolution;
-
AliasHandler ah;
VanityPathHandler vph;
@@ -132,8 +130,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
this.stringInterpolationProvider = stringInterpolationProvider;
this.ah = new AliasHandler(this.factory, this.initializing,
this::doUpdateConfiguration, this::sendChangeEvent);
-
- this.useOptimizeAliasResolution = ah.initializeAliases();
+ this.ah.initializeAliases();
this.registration = registerResourceChangeListener(bundleContext);
@@ -180,8 +177,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
final Resource resource = this.resolver != null ?
resolver.getResource(path) : null;
if (resource != null) {
boolean changed = vph.doAddVanity(resource);
- if (this.useOptimizeAliasResolution
- &&
resource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
+ if (this.ah.usesCache() &&
resource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
changed |= ah.doAddAlias(resource);
}
return changed;
@@ -195,7 +191,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
private boolean updateResource(final String path, final AtomicBoolean
resolverRefreshed) {
final boolean isValidVanityPath = vph.isValidVanityPath(path);
- if (this.useOptimizeAliasResolution || isValidVanityPath) {
+ if (this.ah.usesCache() || isValidVanityPath) {
this.initializing.lock();
try {
@@ -215,7 +211,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
}
changed |= vph.doAddVanity(contentRsrc != null ?
contentRsrc : resource);
}
- if (this.useOptimizeAliasResolution) {
+ if (this.ah.usesCache()) {
changed |= ah.doUpdateAlias(resource);
}
@@ -239,7 +235,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
changed |= vph.removeVanityPath(target);
}
}
- if (this.useOptimizeAliasResolution) {
+ if (this.ah.usesCache()) {
final String pathPrefix = path + "/";
for (final String contentPath : ah.aliasMapsMap.keySet()) {
if (path.startsWith(contentPath + "/")
@@ -363,7 +359,7 @@ public class MapEntries implements MapEntriesHandler,
ResourceChangeListener, Ex
}
public boolean isOptimizeAliasResolutionEnabled() {
- return this.useOptimizeAliasResolution;
+ return this.ah.usesCache();
}
@Override
diff --git
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
index ed410fde..aee76b6a 100644
---
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
+++
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
@@ -201,7 +201,8 @@ public class AliasMapEntriesTest extends
AbstractMappingMapEntriesTest {
@Test
public void
internal_test_simple_alias_support_throwing_unsupported_operation_exception_exception()
{
prepareMapEntriesForAlias(false, false,
UnsupportedOperationException.class, "foo", "bar");
- assertFalse(mapEntries.ah.initializeAliases());
+ mapEntries.ah.initializeAliases();
+ assertFalse(mapEntries.ah.usesCache());
}
@Test
@@ -1176,7 +1177,7 @@ public class AliasMapEntriesTest extends
AbstractMappingMapEntriesTest {
public void test_initAliasesAfterDispose() {
AliasHandler ah = mapEntries.ah;
mapEntries.dispose();
- boolean enabled = ah.initializeAliases();
- assertFalse("return value (isOptimizeAliasResolutionEnabled) should be
false", enabled);
+ ah.initializeAliases();
+ assertFalse("alias handler should not have set up cache",
ah.usesCache());
}
}