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

nfsantos pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new fd0c57c3a8 OAK-11469 - Speedup resolution of mount paths by 
SimpleMountInfoProvider (#2065)
fd0c57c3a8 is described below

commit fd0c57c3a8b4771fa216557c9730c01b5aa194f5
Author: Nuno Santos <[email protected]>
AuthorDate: Mon Feb 10 14:09:57 2025 +0100

    OAK-11469 - Speedup resolution of mount paths by SimpleMountInfoProvider 
(#2065)
---
 .../oak/spi/mount/SimpleMountInfoProvider.java     | 60 +++++++++-------------
 .../oak/spi/mount/SimpleMountInfoProviderTest.java | 19 +++----
 2 files changed, 33 insertions(+), 46 deletions(-)

diff --git 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProvider.java
 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProvider.java
index f2ba524700..9406a4abb1 100644
--- 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProvider.java
+++ 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProvider.java
@@ -18,33 +18,36 @@
  */
 package org.apache.jackrabbit.oak.spi.mount;
 
+import org.jetbrains.annotations.NotNull;
+
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * A simple and inefficient implementation to manage mount points
  */
 final class SimpleMountInfoProvider implements MountInfoProvider {
 
-    private final Map<String, Mount> mounts;
+    private final Map<String, Mount> nameToMount;
     private final Mount defMount;
     private final boolean hasMounts;
+    private final List<Mount> mounts;
 
     SimpleMountInfoProvider(List<Mount> mountInfos) {
-        this.mounts = getMounts(mountInfos);
+        this.mounts = List.copyOf(mountInfos);
+        this.nameToMount = 
mountInfos.stream().collect(Collectors.toMap(Mount::getName, mi -> mi));
         this.hasMounts = !this.mounts.isEmpty();
-        this.defMount = defaultMount(this.mounts);
+        this.defMount = new Mounts.DefaultMount(mounts);
         //TODO add validation of mountpoints
     }
 
     @Override
-    public Mount getMountByPath(String path) {
-        for (Mount m : mounts.values()){
-            if (m.isMounted(path)){
+    public @NotNull Mount getMountByPath(String path) {
+        for (Mount m : mounts) {
+            if (m.isMounted(path)) {
                 return m;
             }
         }
@@ -52,13 +55,13 @@ final class SimpleMountInfoProvider implements 
MountInfoProvider {
     }
 
     @Override
-    public Collection<Mount> getNonDefaultMounts() {
-        return mounts.values();
+    public @NotNull Collection<Mount> getNonDefaultMounts() {
+        return mounts;
     }
 
     @Override
     public Mount getMountByName(String name) {
-        return mounts.get(name);
+        return nameToMount.get(name);
     }
 
     @Override
@@ -67,10 +70,10 @@ final class SimpleMountInfoProvider implements 
MountInfoProvider {
     }
 
     @Override
-    public Collection<Mount> getMountsPlacedUnder(String path) {
-        Collection<Mount> mounts = new ArrayList<>();
-        for ( Mount mount : this.mounts.values()) {
-            if ( mount.isUnder(path) ) {
+    public @NotNull Collection<Mount> getMountsPlacedUnder(String path) {
+        Collection<Mount> mounts = new ArrayList<>(1);
+        for (Mount mount : this.mounts) {
+            if (mount.isUnder(path)) {
                 mounts.add(mount);
             }
         }
@@ -78,10 +81,10 @@ final class SimpleMountInfoProvider implements 
MountInfoProvider {
     }
 
     @Override
-    public Collection<Mount> getMountsPlacedDirectlyUnder(String path) {
-        Collection<Mount> mounts = new ArrayList<>();
-        for ( Mount mount : this.mounts.values()) {
-            if ( mount.isDirectlyUnder(path) ) {
+    public @NotNull Collection<Mount> getMountsPlacedDirectlyUnder(String 
path) {
+        Collection<Mount> mounts = new ArrayList<>(1);
+        for (Mount mount : this.mounts) {
+            if (mount.isDirectlyUnder(path)) {
                 mounts.add(mount);
             }
         }
@@ -89,24 +92,7 @@ final class SimpleMountInfoProvider implements 
MountInfoProvider {
     }
 
     @Override
-    public Mount getDefaultMount() {
+    public @NotNull Mount getDefaultMount() {
         return defMount;
     }
-
-    //~----------------------------------------< builder >
-
-    //~----------------------------------------< private >
-
-    private static Map<String, Mount> getMounts(List<Mount> mountInfos) {
-        Map<String, Mount> mounts = new HashMap<>();
-        for (Mount mi : mountInfos) {
-            mounts.put(mi.getName(), mi);
-        }
-        return Collections.unmodifiableMap(mounts);
-    }
-
-    private static Mount defaultMount(Map<String, Mount> mounts) {
-        return new Mounts.DefaultMount(mounts.values());
-    }
-
 }
diff --git 
a/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProviderTest.java
 
b/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProviderTest.java
index 433c62c374..c41361dc94 100644
--- 
a/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProviderTest.java
+++ 
b/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/mount/SimpleMountInfoProviderTest.java
@@ -18,14 +18,15 @@
  */
 package org.apache.jackrabbit.oak.spi.mount;
 
-import java.util.Collection;
-import java.util.Collections;
 
+import java.util.Collection;
+import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
-import static java.util.stream.Collectors.*;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -34,8 +35,8 @@ import static org.junit.Assert.assertTrue;
 
 public class SimpleMountInfoProviderTest {
     @Test
-    public void defaultMount() throws Exception {
-        MountInfoProvider mip = new 
SimpleMountInfoProvider(Collections.<Mount>emptyList());
+    public void defaultMount() {
+        MountInfoProvider mip = new SimpleMountInfoProvider(List.of());
 
         assertNotNull(mip.getMountByPath("/a"));
         assertTrue(mip.getMountByPath("/a").isDefault());
@@ -43,7 +44,7 @@ public class SimpleMountInfoProviderTest {
     }
 
     @Test
-    public void basicMounting() throws Exception {
+    public void basicMounting() {
         MountInfoProvider mip = Mounts.newBuilder()
                 .mount("foo", "/a", "/b")
                 .mount("bar", "/x", "/y")
@@ -57,7 +58,7 @@ public class SimpleMountInfoProviderTest {
     }
 
     @Test
-    public void nonDefaultMounts() throws Exception{
+    public void nonDefaultMounts() {
         MountInfoProvider mip = Mounts.newBuilder()
                 .mount("foo", "/a", "/b")
                 .mount("bar", "/x", "/y")
@@ -73,7 +74,7 @@ public class SimpleMountInfoProviderTest {
     }
 
     @Test
-    public void readOnlyMounting() throws Exception{
+    public void readOnlyMounting() {
         MountInfoProvider mip = Mounts.newBuilder()
                 .mount("foo", "/a", "/b")
                 .readOnlyMount("bar", "/x", "/y")
@@ -128,6 +129,6 @@ public class SimpleMountInfoProviderTest {
 
     @NotNull
     private static Set<String> mountNames(Collection<Mount> mip) {
-        return mip.stream().map(Mount::getName).collect(toSet());
+        return mip.stream().map(Mount::getName).collect(Collectors.toSet());
     }
 }
\ No newline at end of file

Reply via email to