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 al...@apache.org on 2012/09/27 17:57:44 UTC
svn commit: r1391071 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/lucene/
main/java/org/apache/jackrabbit/oak/spi/query/
test/java/org/apache/jackrabbit/oak/plugins/lucene/
Author: alexparvulescu
Date: Thu Sep 27 15:57:43 2012
New Revision: 1391071
URL: http://svn.apache.org/viewvc?rev=1391071&view=rev
Log:
OAK-340 Basic reindex support in the lucene index
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexConstants.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneReindexHook.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexDefinitionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexUtils.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java Thu Sep 27 15:57:43 2012
@@ -17,10 +17,10 @@
package org.apache.jackrabbit.oak.plugins.lucene;
import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
import static org.apache.jackrabbit.oak.plugins.lucene.FieldFactory.newPathField;
import static org.apache.jackrabbit.oak.plugins.lucene.FieldFactory.newPropertyField;
import static org.apache.jackrabbit.oak.plugins.lucene.TermFactory.newPathTerm;
-import static org.apache.jackrabbit.oak.spi.query.IndexUtils.split;
import java.io.IOException;
@@ -29,6 +29,7 @@ import javax.jcr.PropertyType;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.LongValue;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.query.IndexDefinition;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -71,10 +72,10 @@ class LuceneEditor implements CommitHook
}
}
- private final String[] path;
+ private final Iterable<String> path;
public LuceneEditor(IndexDefinition indexDefinition) {
- this.path = split(indexDefinition.getPath(), INDEX_DATA_CHILD_NAME);
+ this.path = elements(indexDefinition.getPath());
}
/*
@@ -90,7 +91,7 @@ class LuceneEditor implements CommitHook
for (String name : path) {
builder = builder.getChildBuilder(name);
}
- Directory directory = new ReadWriteOakDirectory(builder);
+ Directory directory = new ReadWriteOakDirectory(builder.getChildBuilder(INDEX_DATA_CHILD_NAME));
try {
IndexWriter writer = new IndexWriter(directory, config);
@@ -107,6 +108,8 @@ class LuceneEditor implements CommitHook
diff.postProcess(after);
writer.commit();
+ builder.setProperty(INDEX_UPDATE,
+ new LongValue(System.currentTimeMillis()));
} finally {
writer.close();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndex.java Thu Sep 27 15:57:43 2012
@@ -16,10 +16,10 @@
*/
package org.apache.jackrabbit.oak.plugins.lucene;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
import static org.apache.jackrabbit.oak.plugins.lucene.FieldNames.PATH;
import static org.apache.jackrabbit.oak.plugins.lucene.FieldNames.PATH_SELECTOR;
import static org.apache.jackrabbit.oak.plugins.lucene.TermFactory.newPathTerm;
-import static org.apache.jackrabbit.oak.spi.query.IndexUtils.split;
import java.io.IOException;
import java.util.ArrayList;
@@ -65,12 +65,11 @@ public class LuceneIndex implements Quer
private final IndexDefinition index;
- private final String[] indexDataPath;
+ private final Iterable<String> path;
public LuceneIndex(IndexDefinition indexDefinition) {
this.index = indexDefinition;
- this.indexDataPath = split(indexDefinition.getPath(),
- INDEX_DATA_CHILD_NAME);
+ this.path = elements(indexDefinition.getPath());
}
@Override
@@ -92,9 +91,15 @@ public class LuceneIndex implements Quer
public Cursor query(Filter filter, String revisionId, NodeState root) {
NodeBuilder builder = new ReadOnlyBuilder(root);
- for (String name : indexDataPath) {
+ for (String name : path) {
builder = builder.getChildBuilder(name);
}
+ if (!builder.hasChildNode(INDEX_DATA_CHILD_NAME)) {
+ // index not initialized yet
+ return new PathCursor(Collections.<String> emptySet());
+ }
+ builder = builder.getChildBuilder(INDEX_DATA_CHILD_NAME);
+
Directory directory = new ReadOnlyOakDirectory(builder);
long s = System.currentTimeMillis();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexConstants.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneIndexConstants.java Thu Sep 27 15:57:43 2012
@@ -24,4 +24,6 @@ public interface LuceneIndexConstants {
String INDEX_DATA_CHILD_NAME = ":data";
+ String INDEX_UPDATE = "indexUpdate";
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneReindexHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneReindexHook.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneReindexHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneReindexHook.java Thu Sep 27 15:57:43 2012
@@ -32,7 +32,13 @@ import org.slf4j.LoggerFactory;
* A {@link CommitHook} that handles re-indexing and initial indexing of the
* content.
*
- * Currently it triggers a full reindex on any detected index definition change.
+ * Currently it triggers a full reindex on any detected index definition change
+ * (excepting the properties) OR on removing the
+ * {@link LuceneIndexConstants#INDEX_UPDATE} property
+ *
+ * Warning: This hook has to be placed before the updater {@link LuceneHook},
+ * otherwise it is going to miss the {@link LuceneIndexConstants#INDEX_UPDATE}
+ * change to null
*
*/
public class LuceneReindexHook implements CommitHook, LuceneIndexConstants {
@@ -68,6 +74,10 @@ public class LuceneReindexHook implement
if (!defsBefore.contains(def)) {
defsChanged.add(def);
}
+ // verify initial state or forced reindex
+ if (def.getProperties().get(INDEX_UPDATE) == null) {
+ defsChanged.add(def);
+ }
}
if (defsChanged.isEmpty()) {
return after;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexDefinitionImpl.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexDefinitionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexDefinitionImpl.java Thu Sep 27 15:57:43 2012
@@ -82,8 +82,7 @@ public class IndexDefinitionImpl impleme
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result
- + ((properties == null) ? 0 : properties.hashCode());
+ result = prime * result + ((path == null) ? 0 : path.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + (unique ? 1231 : 1237);
return result;
@@ -103,10 +102,10 @@ public class IndexDefinitionImpl impleme
return false;
} else if (!name.equals(other.name))
return false;
- if (properties == null) {
- if (other.properties != null)
+ if (path == null) {
+ if (other.path != null)
return false;
- } else if (!properties.equals(other.properties))
+ } else if (!path.equals(other.path))
return false;
if (type == null) {
if (other.type != null)
@@ -117,4 +116,5 @@ public class IndexDefinitionImpl impleme
return false;
return true;
}
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexUtils.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexUtils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/IndexUtils.java Thu Sep 27 15:57:43 2012
@@ -71,25 +71,6 @@ public class IndexUtils {
}
/**
- * Splits a give path into its segments and optionally appends a new path to
- * the resulting array
- *
- * @return array containing the path segments
- */
- public static String[] split(String pathIn, String append) {
- List<String> paths = new ArrayList<String>();
- for (String p : pathIn.split("/")) {
- if (p.trim().length() != 0) {
- paths.add(p);
- }
- }
- if (append != null && append.trim().length() != 0) {
- paths.add(append);
- }
- return paths.toArray(new String[paths.size()]);
- }
-
- /**
* @return the 'destination' node if the path exists, null if otherwise
*/
public static NodeState getNode(NodeState nodeState, String destination) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java?rev=1391071&r1=1391070&r2=1391071&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java Thu Sep 27 15:57:43 2012
@@ -65,8 +65,8 @@ public abstract class AbstractLuceneQuer
protected ContentRepository createRepository() {
QueryIndexProvider qip = new CompositeQueryIndexProvider(
new LuceneIndexProvider(DEFAULT_INDEX_HOME));
- CommitHook ch = new CompositeHook(new LuceneHook(DEFAULT_INDEX_HOME),
- new LuceneReindexHook(DEFAULT_INDEX_HOME));
+ CommitHook ch = new CompositeHook(new LuceneReindexHook(
+ DEFAULT_INDEX_HOME), new LuceneHook(DEFAULT_INDEX_HOME));
return new ContentRepositoryImpl(new MicroKernelImpl(), qip, ch);
}