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());
     }
 }

Reply via email to