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)) {