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 ch...@apache.org on 2014/11/10 16:22:42 UTC
svn commit: r1637886 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/
Author: chetanm
Date: Mon Nov 10 15:22:41 2014
New Revision: 1637886
URL: http://svn.apache.org/r1637886
Log:
OAK-2261 - Enable support for NodeType based indexing rules
Pass on the 'root' NodeState to IndexDefinition. This would later be used to create NodeTypeManager for evaluating NodeType hierarchy
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Mon Nov 10 15:22:41 2014
@@ -82,6 +82,8 @@ class IndexDefinition {
private final NodeState definition;
+ private final NodeState root;
+
private final Map<String, PropertyDefinition> propDefns;
private final String funcName;
@@ -102,7 +104,8 @@ class IndexDefinition {
*/
private final long entryCount;
- public IndexDefinition(NodeState defn) {
+ public IndexDefinition(NodeState root, NodeState defn) {
+ this.root = root;
this.definition = defn;
PropertyState pst = defn.getProperty(INCLUDE_PROPERTY_TYPES);
if (pst != null) {
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java Mon Nov 10 15:22:41 2014
@@ -40,10 +40,10 @@ import org.apache.lucene.store.FSDirecto
class IndexNode {
- static IndexNode open(String indexPath, NodeState defnNodeState,@Nullable IndexCopier cloner)
+ static IndexNode open(String indexPath, NodeState root, NodeState defnNodeState,@Nullable IndexCopier cloner)
throws IOException {
Directory directory = null;
- IndexDefinition definition = new IndexDefinition(defnNodeState);
+ IndexDefinition definition = new IndexDefinition(root, defnNodeState);
NodeState data = defnNodeState.getChildNode(INDEX_DATA_CHILD_NAME);
if (data.exists()) {
directory = new OakDirectory(new ReadOnlyBuilder(data), definition);
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexTracker.java Mon Nov 10 15:22:41 2014
@@ -80,7 +80,7 @@ class IndexTracker {
}
}
- synchronized void update(NodeState root) {
+ synchronized void update(final NodeState root) {
Map<String, IndexNode> original = indices;
final Map<String, IndexNode> updates = newHashMap();
@@ -93,7 +93,7 @@ class IndexTracker {
public void leave(NodeState before, NodeState after) {
try {
// TODO: Use DirectoryReader.openIfChanged()
- IndexNode index = IndexNode.open(path, after, cloner);
+ IndexNode index = IndexNode.open(path, root, after, cloner);
updates.put(path, index); // index can be null
} catch (IOException e) {
log.error("Failed to open Lucene index at " + path, e);
@@ -154,7 +154,7 @@ class IndexTracker {
try {
if (isLuceneIndexNode(node)) {
- index = IndexNode.open(path, node, cloner);
+ index = IndexNode.open(path, root, node, cloner);
if (index != null) {
checkState(index.acquire());
indices = ImmutableMap.<String, IndexNode>builder()
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java Mon Nov 10 15:22:41 2014
@@ -105,7 +105,7 @@ public class LuceneIndexEditor implement
this.parent = null;
this.name = null;
this.path = "/";
- this.context = new LuceneIndexEditorContext(definition, analyzer,
+ this.context = new LuceneIndexEditorContext(root, definition, analyzer,
updateCallback);
this.root = root;
if (context.getDefinition().hasDeclaredNodeTypes()) {
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorContext.java Mon Nov 10 15:22:41 2014
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.util.ISO8601;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexWriter;
@@ -63,11 +64,11 @@ public class LuceneIndexEditorContext {
}
}
- private static Directory newIndexDirectory(NodeBuilder definition)
+ private static Directory newIndexDirectory(IndexDefinition indexDefinition, NodeBuilder definition)
throws IOException {
String path = definition.getString(PERSISTENCE_PATH);
if (path == null) {
- return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(definition.getBaseState()));
+ return new OakDirectory(definition.child(INDEX_DATA_CHILD_NAME), indexDefinition);
} else {
// try {
File file = new File(path);
@@ -103,9 +104,9 @@ public class LuceneIndexEditorContext {
private boolean reindex;
- LuceneIndexEditorContext(NodeBuilder definition, Analyzer analyzer, IndexUpdateCallback updateCallback) {
+ LuceneIndexEditorContext(NodeState root, NodeBuilder definition, Analyzer analyzer, IndexUpdateCallback updateCallback) {
this.definitionBuilder = definition;
- this.definition = new IndexDefinition(definitionBuilder.getBaseState());
+ this.definition = new IndexDefinition(root, definitionBuilder.getBaseState());
this.config = getIndexWriterConfig(analyzer, this.definition);
this.indexedNodes = 0;
this.updateCallback = updateCallback;
@@ -125,7 +126,7 @@ public class LuceneIndexEditorContext {
IndexWriter getWriter() throws IOException {
if (writer == null) {
- writer = new IndexWriter(newIndexDirectory(definitionBuilder), config);
+ writer = new IndexWriter(newIndexDirectory(definition, definitionBuilder), config);
}
return writer;
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopierTest.java Mon Nov 10 15:22:41 2014
@@ -55,7 +55,7 @@ public class IndexCopierTest {
@Test
public void basicTest() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
Directory remote = new RAMDirectory();
@@ -81,7 +81,7 @@ public class IndexCopierTest {
@Test
public void concurrentRead() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
CollectingExecutor executor = new CollectingExecutor();
IndexCopier c1 = new RAMIndexCopier(baseDir, executor, getWorkDir());
@@ -120,7 +120,7 @@ public class IndexCopierTest {
@Test
public void reuseLocalDir() throws Exception{
Directory baseDir = new RAMDirectory();
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
TestRAMDirectory remote = new TestRAMDirectory();
@@ -161,7 +161,7 @@ public class IndexCopierTest {
Directory baseDir = new CloseSafeDir();
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
IndexCopier c1 = new RAMIndexCopier(baseDir, sameThreadExecutor(), getWorkDir());
Directory r1 = new RAMDirectory();
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java Mon Nov 10 15:22:41 2014
@@ -50,7 +50,7 @@ public class IndexDefinitionTest {
@Test
public void fullTextEnabled() throws Exception{
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertTrue("By default fulltext is enabled", defn.isFullTextEnabled());
assertTrue("By default everything is indexed", defn.includeProperty("foo"));
assertFalse("Property types need to be defined", defn.includePropertyType(PropertyType.DATE));
@@ -65,7 +65,7 @@ public class IndexDefinitionTest {
builder.setProperty(createProperty(INCLUDE_PROPERTY_TYPES, of(TYPENAME_LONG), STRINGS));
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS));
builder.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertFalse(defn.isFullTextEnabled());
assertFalse("If fulltext disabled then nothing stored",defn.isStored("foo"));
@@ -84,7 +84,7 @@ public class IndexDefinitionTest {
public void propertyDefinition() throws Exception{
builder.child(PROP_NODE).child("foo").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "bar"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertTrue(defn.hasPropertyDefinition("foo"));
assertFalse(defn.hasPropertyDefinition("bar"));
@@ -95,7 +95,7 @@ public class IndexDefinitionTest {
@Test
public void propertyDefinitionWithExcludes() throws Exception{
builder.child(PROP_NODE).child("foo").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertTrue(defn.hasPropertyDefinition("foo"));
assertFalse(defn.hasPropertyDefinition("bar"));
@@ -105,17 +105,17 @@ public class IndexDefinitionTest {
@Test
public void codecConfig() throws Exception{
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertNotNull(defn.getCodec());
assertEquals(oakCodec.getName(), defn.getCodec().getName());
builder.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
- defn = new IndexDefinition(builder.getNodeState());
+ defn = new IndexDefinition(root, builder.getNodeState());
assertNull(defn.getCodec());
Codec simple = Codec.getDefault();
builder.setProperty(LuceneIndexConstants.CODEC_NAME, simple.getName());
- defn = new IndexDefinition(builder.getNodeState());
+ defn = new IndexDefinition(root, builder.getNodeState());
assertNotNull(defn.getCodec());
assertEquals(simple.getName(), defn.getCodec().getName());
}
@@ -123,7 +123,7 @@ public class IndexDefinitionTest {
@Test
public void relativeProperty() throws Exception{
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo" , "foo1/bar"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertEquals(1, defn.getRelativeProps().size());
assertEquals(new RelativeProperty("foo1/bar"), Iterables.getFirst(defn.getRelativeProps(), null));
@@ -136,7 +136,7 @@ public class IndexDefinitionTest {
builder.child(PROP_NODE).child("foo1").child("bar").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_DATE);
builder.child(PROP_NODE).child("foo2").child("bar2").child("baz").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_LONG);
builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo", "foo1/bar", "foo2/bar2/baz"), STRINGS));
- IndexDefinition defn = new IndexDefinition(builder.getNodeState());
+ IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
assertEquals(2, defn.getRelativeProps().size());
assertNull(defn.getPropDefn("foo"));
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java Mon Nov 10 15:22:41 2014
@@ -54,7 +54,7 @@ public class IndexPlannerTest {
@Test
public void planForSortField() throws Exception{
NodeBuilder defn = LuceneIndexHelper.newLucenePropertyIndexDefinition(builder, "test", ImmutableSet.of("foo"), "async");
- IndexNode node = createIndexNode(new IndexDefinition(defn.getNodeState()));
+ IndexNode node = createIndexNode(new IndexDefinition(root, defn.getNodeState()));
IndexPlanner planner = new IndexPlanner(node, "/foo", createFilter("nt:base"),
ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING)));
assertNotNull(planner.getPlan());
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java?rev=1637886&r1=1637885&r2=1637886&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java Mon Nov 10 15:22:41 2014
@@ -112,7 +112,7 @@ public class OakDirectoryTest {
}
private Directory createDir(NodeBuilder builder){
- return new OakDirectory(builder.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(builder.getNodeState()));
+ return new OakDirectory(builder.child(INDEX_DATA_CHILD_NAME), new IndexDefinition(root, builder.getNodeState()));
}
byte[] randomBytes(int size) {