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:27:19 UTC

svn commit: r1751319 - 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:27:19 2016
New Revision: 1751319

URL: http://svn.apache.org/viewvc?rev=1751319&view=rev
Log:
OAK-3404 -[multiplex]  Path to logical store mapping

Add MountInfoProvider.getMountsPlacedUnder, which will allow the
MultiplexingDocumentStore to build store candidates for queries. This
replaces the previous MountInfoProvider.getMountsContainedBetweenPaths,
which was conceptually too closely tied to the DocumentStore
persistence.

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=1751319&r1=1751318&r2=1751319&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:27:19 2016
@@ -37,7 +37,7 @@ final class MountInfo {
         @Override
         public String apply(String input) {
             if ( input.endsWith("/") && input.length() > 1) {
-                return input.substring(0, input.length() - 2); 
+                return input.substring(0, input.length() - 1); 
             }
             return input;
         }
@@ -54,8 +54,22 @@ final class MountInfo {
     public Mount getMount() {
         return mount;
     }
+    
+    public boolean isUnder(String path) {
+
+        path = SANITIZE_PATH.apply(path);
+
+        for (String includedPath : includedPaths) {
+            if (isAncestor(path, includedPath)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 
     public boolean isMounted(String path){
+        
         if (path.contains(mount.getPathFragmentName())){
             return true;
         }
@@ -65,22 +79,12 @@ final class MountInfo {
         //TODO may be optimized via trie
         
         for (String includedPath : includedPaths){
-            if (includedPath.equals(path) || isAncestor(includedPath, path)) {
+            if ( includedPath.equals(path) || isAncestor(includedPath, path)) {
                 return true;
             }
         }
         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=1751319&r1=1751318&r2=1751319&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:27:19 2016
@@ -20,7 +20,6 @@
 package org.apache.jackrabbit.oak.plugins.multiplex;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -72,24 +71,17 @@ 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());
+
+    @Override
+    public Collection<Mount> getMountsPlacedUnder(String path) {
+        Collection<Mount> mounts = Lists.newArrayList();
+        for ( MountInfo mount : mountInfos ) {
+            if ( mount.isUnder(path) ) {
+                mounts.add(mount.getMount());
             }
         }
-        
-        return matching;
+        return mounts;
     }
 
     //~----------------------------------------< 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=1751319&r1=1751318&r2=1751319&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:27:19 2016
@@ -46,10 +46,9 @@ public interface MountInfoProvider {
             return false;
         }
         
-        @Override
-        public Collection<Mount> getMountsContainedBetweenPaths(String fromPath, String toPath) {
-            return Collections.singleton(Mount.DEFAULT);
-        }
+        public Collection<Mount> getMountsPlacedUnder(String path) {
+            return Collections.emptySet();
+        };
     };
 
     /**
@@ -82,23 +81,10 @@ public interface MountInfoProvider {
     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>.
+     * Returns all mounts placed under the specified path
      * 
-     * @param fromPath the start path
-     * @param toPath the end path
-     * @return a Collection for stores, never <code>null</code>
+     * @param path the path under which mounts are to be found
+     * @return a collection of mounts, possibly empty
      */
-    Collection<Mount> getMountsContainedBetweenPaths(String fromPath, String toPath);
+    Collection<Mount> getMountsPlacedUnder(String path);    
 }

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=1751319&r1=1751318&r2=1751319&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:27:19 2016
@@ -37,14 +37,4 @@ 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=1751319&r1=1751318&r2=1751319&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:27:19 2016
@@ -84,15 +84,15 @@ public class SimpleMountInfoProviderTest
     }
     
     @Test
-    public void mountsContainedBetweenPaths() {
+    public void mountsPlacedUnder() {
         
         MountInfoProvider mip = SimpleMountInfoProvider.newBuilder()
                 .mount("first", "/b")
-                .mount("second", "/d")
-                .mount("third", "/h")
+                .mount("second", "/d", "/b/a")
+                .mount("third", "/h", "/b/c")
                 .build();
         
-        Collection<Mount> mountsContainedBetweenPaths = mip.getMountsContainedBetweenPaths("/a", "/f");
+        Collection<Mount> mountsContainedBetweenPaths = mip.getMountsPlacedUnder("/b");
         
         assertEquals(2, mountsContainedBetweenPaths.size());
     }