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 th...@apache.org on 2018/11/23 10:29:40 UTC

svn commit: r1847241 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ oak-store-composite/src/main/java/org/apache/jackrabbit/...

Author: thomasm
Date: Fri Nov 23 10:29:39 2018
New Revision: 1847241

URL: http://svn.apache.org/viewvc?rev=1847241&view=rev
Log:
OAK-7910 Composite node store: Creating a new Lucene index; reindex

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
    jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeBuilder.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1847241&r1=1847240&r2=1847241&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java Fri Nov 23 10:29:39 2018
@@ -61,6 +61,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
+import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder;
 import org.apache.jackrabbit.util.ISO8601;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -318,7 +319,12 @@ public class IndexUpdate implements Edit
             if (NodeStateUtils.isHidden(rm)) {
                 NodeBuilder childNode = definition.getChildNode(rm);
                 if (!childNode.getBoolean(IndexConstants.REINDEX_RETAIN)) {
-                    definition.getChildNode(rm).remove();
+                    NodeBuilder child = definition.getChildNode(rm);
+                    if (child instanceof ReadOnlyBuilder) {
+                        log.debug("Preserve read-only child node on reindex: " + rm);
+                    } else {
+                        child.remove();
+                    }
                 }
             }
         }

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java?rev=1847241&r1=1847240&r2=1847241&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java Fri Nov 23 10:29:39 2018
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.search.FulltextIndexConstants;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
@@ -174,7 +175,11 @@ public class OakDirectory extends Direct
         } else {
             LOG.debug("Not marking {} under {} for active deletion", name, indexName);
         }
-        f.remove();
+        if (f instanceof ReadOnlyBuilder) {
+            LOG.debug("Preserve read-only node: " + name);
+        } else {
+            f.remove();
+        }
         markDirty();
     }
 
@@ -253,7 +258,11 @@ public class OakDirectory extends Direct
     public void close() throws IOException {
         if (!readOnly && definition.saveDirListing()) {
             if (!fileNamesAtStart.equals(fileNames)) {
-                directoryBuilder.setProperty(createProperty(PROP_DIR_LISTING, fileNames, STRINGS));
+                if (directoryBuilder instanceof ReadOnlyBuilder) {
+                    LOG.debug("Preserve files of read-only directory: " + fileNames);
+                } else {
+                    directoryBuilder.setProperty(createProperty(PROP_DIR_LISTING, fileNames, STRINGS));
+                }
             }
         }
     }
@@ -296,12 +305,16 @@ public class OakDirectory extends Direct
         NodeBuilder file = directoryBuilder.getChildNode(name);
         if (file.exists()) {
             // overwrite potentially already existing child
-            NodeBuilder destFile = dest.directoryBuilder.setChildNode(name, EMPTY_NODE);
-            for (PropertyState p : file.getProperties()) {
-                destFile.setProperty(p);
+            if (dest.directoryBuilder instanceof ReadOnlyBuilder) {
+                LOG.debug("Preserve read-only child: " + name);
+            } else {
+                NodeBuilder destFile = dest.directoryBuilder.setChildNode(name, EMPTY_NODE);
+                for (PropertyState p : file.getProperties()) {
+                    destFile.setProperty(p);
+                }
+                dest.fileNames.add(name);
+                dest.markDirty();
             }
-            dest.fileNames.add(name);
-            dest.markDirty();
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeBuilder.java?rev=1847241&r1=1847240&r2=1847241&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeBuilder.java Fri Nov 23 10:29:39 2018
@@ -25,12 +25,13 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
-import static com.google.common.base.Preconditions.checkState;
 import static java.lang.Long.MAX_VALUE;
 import static java.util.Collections.singleton;
 import static org.apache.jackrabbit.oak.composite.CompositeNodeState.STOP_COUNTING_CHILDREN;
@@ -40,6 +41,8 @@ import static org.apache.jackrabbit.oak.
 
 class CompositeNodeBuilder implements NodeBuilder {
 
+    private final static Logger LOG = LoggerFactory.getLogger(CompositeNodeBuilder.class);
+
     private final CompositionContext ctx;
 
     private final NodeMap<NodeBuilder> nodeBuilders;
@@ -227,9 +230,14 @@ class CompositeNodeBuilder implements No
             throw new IllegalStateException("This builder does not exist: " + PathUtils.getName(getPath()));
         }
         String childPath = simpleConcat(getPath(), name);
-        final MountedNodeStore childStore = ctx.getOwningStore(childPath);
+        MountedNodeStore childStore = ctx.getOwningStore(childPath);
         if (childStore != ctx.getGlobalStore() && !nodeBuilders.get(childStore).exists()) {
-            throw new IllegalStateException("The mount root doesn't exist: " + getPath() + " for " + childStore);
+            // if it doesn't exist in the read-only repository, create it in the global repository
+            // (needed for example for a new index)
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Creating node in the global store; will become invisible once overlayed: " + childPath);
+            }
+            childStore = ctx.getGlobalStore();
         }
         final NodeBuilder childBuilder = nodeBuilders.get(childStore).setChildNode(name, nodeState);
         if (!ctx.shouldBeComposite(childPath)) {