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 to...@apache.org on 2017/06/08 11:37:55 UTC

svn commit: r1798047 - in /jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite: CompositeNodeStore.java CompositeNodeStoreService.java

Author: tomekr
Date: Thu Jun  8 11:37:55 2017
New Revision: 1798047

URL: http://svn.apache.org/viewvc?rev=1798047&view=rev
Log:
OAK-6320: Allow to disable the read-only mode in composite node store

Modified:
    jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
    jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java

Modified: jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java?rev=1798047&r1=1798046&r2=1798047&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java Thu Jun  8 11:37:55 2017
@@ -385,6 +385,8 @@ public class CompositeNodeStore implemen
 
         private final List<String> ignoreReadOnlyWritePaths = Lists.newArrayList();
 
+        private boolean partialReadOnly = true;
+
         public Builder(MountInfoProvider mip, NodeStore globalStore) {
             this.mip = checkNotNull(mip, "mountInfoProvider");
             this.globalStore = checkNotNull(globalStore, "globalStore");
@@ -404,24 +406,28 @@ public class CompositeNodeStore implemen
             return this;
         }
 
+        public Builder setPartialReadOnly(boolean partialReadOnly) {
+            this.partialReadOnly = partialReadOnly;
+            return this;
+        }
+
         public CompositeNodeStore build() {
-            checkReadWriteMountsNumber();
             checkMountsAreConsistentWithMounts();
+            if (partialReadOnly) {
+                assertPartialMountsAreReadOnly();
+            }
             return new CompositeNodeStore(mip, globalStore, nonDefaultStores, ignoreReadOnlyWritePaths);
         }
 
-        private void checkReadWriteMountsNumber() {
+        public void assertPartialMountsAreReadOnly() {
             List<String> readWriteMountNames = Lists.newArrayList();
-            if (!mip.getDefaultMount().isReadOnly()) {
-                readWriteMountNames.add(mip.getDefaultMount().getName());
-            }
             for (Mount mount : mip.getNonDefaultMounts()) {
                 if (!mount.isReadOnly()) {
                     readWriteMountNames.add(mount.getName());
                 }
             }
-            checkArgument(readWriteMountNames.size() <= 1,
-                    "Expected at most 1 write-enabled mount, but got %s: %s.", readWriteMountNames.size(), readWriteMountNames);
+            checkArgument(readWriteMountNames.isEmpty(),
+                    "Following partial mounts are write-enabled: ", readWriteMountNames);
         }
 
         private void checkMountsAreConsistentWithMounts() {

Modified: jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java?rev=1798047&r1=1798046&r2=1798047&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreService.java Thu Jun  8 11:37:55 2017
@@ -73,6 +73,12 @@ public class CompositeNodeStoreService {
     )
     private static final String PROP_IGNORE_READ_ONLY_WRITES = "ignoreReadOnlyWrites";
 
+    @Property(label = "Read-only mounts",
+            description = "The partial stores should be configured as read-only",
+            boolValue = true
+    )
+    private static final String PROP_PARTIAL_READ_ONLY = "partialReadOnly";
+
     private ComponentContext context;
 
     private ServiceRegistration nsReg;
@@ -83,10 +89,13 @@ public class CompositeNodeStoreService {
 
     private String[] ignoreReadOnlyWritePaths;
 
+    private boolean partialReadOnly;
+
     @Activate
     protected void activate(ComponentContext context, Map<String, ?> config) {
         this.context = context;
         ignoreReadOnlyWritePaths = PropertiesUtil.toStringArray(config.get(PROP_IGNORE_READ_ONLY_WRITES));
+        partialReadOnly = PropertiesUtil.toBoolean(config.get(PROP_PARTIAL_READ_ONLY), true);
         registerCompositeNodeStore();
     }
 
@@ -126,6 +135,7 @@ public class CompositeNodeStoreService {
         LOG.info("Node stores for all configured mounts are available");
 
         CompositeNodeStore.Builder builder = new CompositeNodeStore.Builder(mountInfoProvider, globalNs.getNodeStoreProvider().getNodeStore());
+        builder.setPartialReadOnly(partialReadOnly);
         for (String p : ignoreReadOnlyWritePaths) {
             builder.addIgnoredReadOnlyWritePath(p);
         }