Author: mreutegg
Date: Tue Apr 16 12:03:39 2019
New Revision: 1857646

URL: http://svn.apache.org/viewvc?rev=1857646&view=rev
Log:
OAK-8185: Improve CompositeNodeStore fixture

Merged revision 1857640 from trunk

Modified:
    jackrabbit/oak/branches/1.10/   (props changed)
    
jackrabbit/oak/branches/1.10/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java

Propchange: jackrabbit/oak/branches/1.10/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 16 12:03:39 2019
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1851533-1851535,1851619,1852052,1852084,1852120,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854055,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854455,1854461-1854462,1854466,1854468,1854515,1854533,1854539,1854701,1854773-1854774,1854827,1854848,1854859,1854930,1854990-1854991,1855032,1855221,1855477-1855478,1855776,1857010,1857104,1857159,1857212,1857221,1857238,1857247,1857253,1857294,1857314,1857577,1857635,1857638
+/jackrabbit/oak/trunk:1850874,1850882,1851236,1851253,1851451,1851533-1851535,1851619,1852052,1852084,1852120,1852451,1852492-1852493,1852528,1852582,1852584,1852601,1852920,1853141,1853229,1853393,1853429,1853433,1853441,1853866,1853868,1853870,1853893,1853969,1853997,1854034,1854044,1854055,1854058,1854113,1854373,1854377,1854380,1854385,1854401,1854403,1854455,1854461-1854462,1854466,1854468,1854515,1854533,1854539,1854701,1854773-1854774,1854827,1854848,1854859,1854930,1854990-1854991,1855032,1855221,1855477-1855478,1855776,1857010,1857104,1857159,1857212,1857221,1857238,1857247,1857253,1857294,1857314,1857577,1857635,1857638,1857640
 /jackrabbit/trunk:1345480

Modified: 
jackrabbit/oak/branches/1.10/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java?rev=1857646&r1=1857645&r2=1857646&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.10/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java
 (original)
+++ 
jackrabbit/oak/branches/1.10/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/CompositeStoreFixture.java
 Tue Apr 16 12:03:39 2019
@@ -19,6 +19,13 @@ package org.apache.jackrabbit.oak.fixtur
 
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.composite.CompositeNodeStore;
+import org.apache.jackrabbit.oak.composite.InitialContentMigrator;
+import org.apache.jackrabbit.oak.composite.checks.MountedNodeStoreChecker;
+import 
org.apache.jackrabbit.oak.composite.checks.NamespacePrefixNodestoreChecker;
+import org.apache.jackrabbit.oak.composite.checks.NodeStoreChecksService;
+import 
org.apache.jackrabbit.oak.composite.checks.NodeTypeDefinitionNodeStoreChecker;
+import 
org.apache.jackrabbit.oak.composite.checks.NodeTypeMountedNodeStoreChecker;
+import org.apache.jackrabbit.oak.composite.checks.UniqueIndexNodeStoreChecker;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
@@ -26,15 +33,19 @@ import org.apache.jackrabbit.oak.segment
 import org.apache.jackrabbit.oak.segment.file.FileStore;
 import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 import com.mongodb.MongoClientURI;
 
+import static java.util.Arrays.asList;
 import static 
org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentNodeStoreBuilder.newMongoDocumentNodeStoreBuilder;
 import static 
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
 
@@ -44,6 +55,15 @@ abstract class CompositeStoreFixture ext
 
     private final int pathsPerMount;
 
+    private static final MountInfoProvider MOUNT_INFO_PROVIDER = 
Mounts.newBuilder()
+            .mount("libs", true, asList(
+                    "/oak:index/*$" // pathsSupportingFragments
+            ), asList(
+                    "/libs",        // mountedPaths
+                    "/apps",
+                    
"/jcr:system/rep:permissionStore/oak:mount-libs-crx.default"))
+            .build();
+
     private CompositeStoreFixture(String name, int mounts, int pathsPerMount) {
         super(name);
         this.mounts = mounts;
@@ -127,25 +147,34 @@ abstract class CompositeStoreFixture ext
         };
     }
 
+    protected abstract NodeStore getNodeStore() throws IOException, 
InvalidFileStoreVersionException;
+
     @Override
     public Oak getOak(int clusterId) throws Exception {
-        NodeStore nodeStore = getNodeStore();
-        Mounts.Builder mip = Mounts.newBuilder();
-        for (int i = 0; i < mounts; i++) {
-            String[] paths = new String[pathsPerMount];
-            for (int j = 0; j < pathsPerMount; j++) {
-                paths[j] = String.format("/mount-%d-path-%d", i, j);
-            }
-            mip.readOnlyMount("custom-mount-" + i, paths);
-        }
-        CompositeNodeStore.Builder builder = new 
CompositeNodeStore.Builder(mip.build(), nodeStore);
-        for (int i = 0; i < mounts; i++) {
-            builder.addMount("custom-mount-" + i, nodeStore);
-        }
-        return new Oak(builder.build());
+        MemoryNodeStore seed = new MemoryNodeStore();
+        Oak oakSeed = new Oak(seed);
+        populateSeed(oakSeed);
+
+        NodeStore global = getNodeStore();
+        new InitialContentMigrator(global, seed, 
MOUNT_INFO_PROVIDER.getMountByName("libs")).migrate();
+
+        List<MountedNodeStoreChecker<?>> checkerList = new ArrayList<>();
+        checkerList.add(new NamespacePrefixNodestoreChecker());
+        checkerList.add(new NodeTypeDefinitionNodeStoreChecker());
+        checkerList.add(new NodeTypeMountedNodeStoreChecker());
+        checkerList.add(new UniqueIndexNodeStoreChecker());
+
+        NodeStore composite = new 
CompositeNodeStore.Builder(MOUNT_INFO_PROVIDER, global)
+                .addMount("libs", seed)
+                .with(new NodeStoreChecksService(MOUNT_INFO_PROVIDER, 
checkerList))
+                .build();
+        return new Oak(composite);
     }
 
-    protected abstract NodeStore getNodeStore() throws IOException, 
InvalidFileStoreVersionException;
+    // this method allows to populate the /apps and /libs subtrees, which 
becomes
+    // immutable after the composite node store is created
+    private void populateSeed(Oak oakSeed) {
+    }
 
     @Override
     public Oak[] setUpCluster(int n, StatisticsProvider statsProvider) throws 
Exception {


Reply via email to