You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/07/04 15:26:49 UTC
svn commit: r1751315 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/multiplex/
main/java/org/apache/jackrabbit/oak/spi/mount/
test/java/org/apache/jackrabbit/oak/plugins/multiplex/
Author: chetanm
Date: Mon Jul 4 15:26:49 2016
New Revision: 1751315
URL: http://svn.apache.org/viewvc?rev=1751315&view=rev
Log:
OAK-3404 - [multiplex] Path to logical store mapping
Add a way to determine whether two paths are 'wrap' a Mount. This is
useful when determining whether a store needs to be included in the
query execution or not.
Author - Robert Munteanu
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfoProvider.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfoTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProviderTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java?rev=1751315&r1=1751314&r2=1751315&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java Mon Jul 4 15:26:49 2016
@@ -54,6 +54,16 @@ final class MountInfo {
}
return false;
}
+
+ public boolean isWrapped(String from, String to) {
+ for ( String path : includedPaths ) {
+ if ( from.compareTo(path) < 0 && path.compareTo(to) < 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
@Override
public String toString() {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProvider.java?rev=1751315&r1=1751314&r2=1751315&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProvider.java Mon Jul 4 15:26:49 2016
@@ -20,6 +20,7 @@
package org.apache.jackrabbit.oak.plugins.multiplex;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -71,6 +72,25 @@ public class SimpleMountInfoProvider imp
public boolean hasNonDefaultMounts() {
return hasMounts;
}
+
+ @Override
+ public Collection<Mount> getMountsContainedBetweenPaths(String fromPath, String toPath) {
+
+ List<Mount> matching = Lists.newArrayList();
+ List<MountInfo> allMountInfos = Lists.newArrayList();
+ allMountInfos.add(new MountInfo(Mount.DEFAULT, Collections.singletonList("/")));
+ allMountInfos.addAll(mountInfos);
+
+ boolean hasUncertainPaths = fromPath == null || toPath == null;
+
+ for ( MountInfo mountInfo : allMountInfos ) {
+ if ( !hasUncertainPaths && mountInfo.isWrapped(fromPath, toPath)) {
+ matching.add(mountInfo.getMount());
+ }
+ }
+
+ return matching;
+ }
//~----------------------------------------< builder >
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfoProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfoProvider.java?rev=1751315&r1=1751314&r2=1751315&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfoProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfoProvider.java Mon Jul 4 15:26:49 2016
@@ -45,6 +45,11 @@ public interface MountInfoProvider {
public boolean hasNonDefaultMounts() {
return false;
}
+
+ @Override
+ public Collection<Mount> getMountsContainedBetweenPaths(String fromPath, String toPath) {
+ return Collections.singleton(Mount.DEFAULT);
+ }
};
/**
@@ -75,4 +80,25 @@ public interface MountInfoProvider {
* Return true if there are explicit mounts configured
*/
boolean hasNonDefaultMounts();
+
+ /**
+ * Returns all mounts which are contained between the specified <tt>fromPath</tt> and <tt>toPath</tt>
+ *
+ * <p>If either of the path parameters is null, all stores are returned</p>
+ *
+ * <p>For instance, assume that we have the following mounts:</p>
+ *
+ * <ol>
+ * <li>first:/b</li>
+ * <li>second:/d</li>
+ * <li>third:/e</li>
+ * </ol>
+ *
+ * <p>A call to <tt>infoProvider.getMountsContainedBetweenPaths("/c","/f")</tt> would return stores <tt>second</tt> and <tt>third</tt>.
+ *
+ * @param fromPath the start path
+ * @param toPath the end path
+ * @return a Collection for stores, never <code>null</code>
+ */
+ Collection<Mount> getMountsContainedBetweenPaths(String fromPath, String toPath);
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfoTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfoTest.java?rev=1751315&r1=1751314&r2=1751315&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfoTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfoTest.java Mon Jul 4 15:26:49 2016
@@ -37,5 +37,14 @@ public class MountInfoTest {
assertFalse(md.isMounted("/x/y"));
assertFalse(md.isMounted("/x/y/foo"));
}
+
+ @Test
+ public void isWrapped() {
+ MountInfo mi = new MountInfo(new Mount("foo"), of("/c", "/f"));
+ assertTrue(mi.isWrapped("/a", "/g")); // wraps both
+ assertTrue(mi.isWrapped("/b", "/d")); // wraps one
+ assertFalse(mi.isWrapped("/a", "/b")); // wraps none ('outside c-f')
+ assertFalse(mi.isWrapped("/d", "/e")); // wraps none ('inside c-f')
+ }
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProviderTest.java?rev=1751315&r1=1751314&r2=1751315&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/multiplex/SimpleMountInfoProviderTest.java Mon Jul 4 15:26:49 2016
@@ -26,7 +26,6 @@ import org.apache.jackrabbit.oak.spi.mou
import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
import org.junit.Test;
-import static com.google.common.collect.ImmutableList.of;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -83,5 +82,18 @@ public class SimpleMountInfoProviderTest
assertTrue(mip.getMountByName("bar").isReadOnly());
assertFalse(mip.getMountByName("foo").isReadOnly());
}
-
+
+ @Test
+ public void mountsContainedBetweenPaths() {
+
+ MountInfoProvider mip = SimpleMountInfoProvider.newBuilder()
+ .mount("first", "/b")
+ .mount("second", "/d")
+ .mount("third", "/h")
+ .build();
+
+ Collection<Mount> mountsContainedBetweenPaths = mip.getMountsContainedBetweenPaths("/a", "/f");
+
+ assertEquals(2, mountsContainedBetweenPaths.size());
+ }
}
\ No newline at end of file