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