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