Author: thomasm
Date: Wed Jun 13 14:42:22 2012
New Revision: 1349882

URL: http://svn.apache.org/viewvc?rev=1349882&view=rev
Log:
OAK-137 Query: content index (simplify the API a bit)

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1349882&r1=1349881&r2=1349882&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
 Wed Jun 13 14:42:22 2012
@@ -39,7 +39,7 @@ public class IndexWrapper extends MicroK
 
     public IndexWrapper(MicroKernel mk) {
         this.mk = MicroKernelWrapperBase.wrap(mk);
-        this.indexer = new Indexer(this, mk, Indexer.INDEX_CONFIG_ROOT);
+        this.indexer = new Indexer(mk);
         indexer.init();
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1349882&r1=1349881&r2=1349882&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
 Wed Jun 13 14:42:22 2012
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.mk.index;
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.json.JsopBuilder;
 import org.apache.jackrabbit.mk.json.JsopReader;
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
@@ -30,7 +31,6 @@ import org.apache.jackrabbit.oak.spi.Que
 import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -63,9 +63,8 @@ public class Indexer implements QueryInd
     private static final boolean DISABLED = 
Boolean.getBoolean("mk.indexDisabled");
 
     private MicroKernel mk;
-    private MicroKernel mkWrapper;
     private String revision;
-    private String indexRootNode;
+    private String indexRootNode = INDEX_CONFIG_ROOT;
     private int indexRootNodeDepth;
     private StringBuilder buffer;
     private ArrayList<QueryIndex> queryIndexList;
@@ -89,18 +88,25 @@ public class Indexer implements QueryInd
      */
     private final HashMap<String, PropertyIndex> propertyIndexes = new 
HashMap<String, PropertyIndex>();
 
-    public Indexer(MicroKernel mkWrapper, MicroKernel mk, String 
indexRootNode) {
-        this.mkWrapper = mkWrapper;
-        if (mkWrapper instanceof IndexWrapper) {
-            this.mk = ((IndexWrapper) mkWrapper).getBaseKernel();
-        } else {
-            this.mk = mk;
-        }
-        this.indexRootNode = indexRootNode;
+    Indexer(MicroKernel mk) {
+        this.mk = mk;
     }
 
-    public Indexer(MicroKernel mk) {
-        this(mk, mk, INDEX_CONFIG_ROOT);
+    /**
+     * Get the indexer for the given MicroKernel. This will either create a 
new instance,
+     * or (if the MicroKernel is an IndexWrapper), return the existing indexer.
+     *
+     * @param mk the MicroKernel instance
+     * @return an indexer
+     */
+    public static Indexer getInstance(MicroKernel mk) {
+        if (mk instanceof IndexWrapper) {
+            Indexer indexer = ((IndexWrapper) mk).getIndexer();
+            if (indexer != null) {
+                return indexer;
+            }
+        }
+        return new Indexer(mk);
     }
 
     public String getIndexRootNode() {
@@ -371,7 +377,18 @@ public class Indexer implements QueryInd
         JsopBuilder jsop = new JsopBuilder();
         jsop.tag('^').key("rev").value(readRevision);
         buffer(jsop.toString());
-        commitChanges();
+        try {
+            commitChanges();
+        } catch (MicroKernelException e) {
+            if (!mk.nodeExists(indexRootNode, revision)) {
+                // the index node itself was removed, which is
+                // unexpected but possible - re-create it
+                init = false;
+                init();
+            } else {
+                throw e;
+            }
+        }
         return revision;
     }
 
@@ -619,15 +636,12 @@ public class Indexer implements QueryInd
     @Override
     public List<QueryIndex> getQueryIndexes(MicroKernel mk) {
         init();
-        if (mk != this.mkWrapper) {
-            return Collections.emptyList();
-        }
         if (queryIndexList == null) {
             queryIndexList = new ArrayList<QueryIndex>();
             for (Index index : indexes.values()) {
                 QueryIndex qi = null;
                 if (index instanceof PropertyIndex) {
-                    qi = new PropertyContentIndex(mk, (PropertyIndex) index);
+                    qi = new PropertyContentIndex((PropertyIndex) index);
                 } else if (index instanceof PrefixIndex) {
                     // TODO support prefix indexes?
                 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java?rev=1349882&r1=1349881&r2=1349882&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/IndexTest.java
 Wed Jun 13 14:42:22 2012
@@ -30,11 +30,14 @@ import org.junit.Test;
 public class IndexTest {
 
     private final MicroKernel mk = new MicroKernelImpl();
+    private final Indexer indexer = Indexer.getInstance(mk);
+
+    {
+        indexer.init();
+    }
 
     @Test
     public void createIndexAfterAddingData() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         PropertyIndex indexOld = indexer.createPropertyIndex("x", false);
         mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 1 }, \"id\": 1 }", 
mk.getHeadRevision(), "");
         mk.commit("/", "+ \"test3\": { \"test2\": { \"id\": 2 }, \"id\": 2 }", 
mk.getHeadRevision(), "");
@@ -50,8 +53,6 @@ public class IndexTest {
 
     @Test
     public void nonUnique() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         PropertyIndex index = indexer.createPropertyIndex("id", false);
         mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 1 }, \"id\": 1 }", 
mk.getHeadRevision(), "");
         mk.commit("/", "+ \"test3\": { \"test2\": { \"id\": 2 }, \"id\": 2 }", 
mk.getHeadRevision(), "");
@@ -65,8 +66,6 @@ public class IndexTest {
 
     @Test
     public void nestedAddNode() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         PropertyIndex index = indexer.createPropertyIndex("id", true);
 
         mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 2 }, \"id\": 1 }", 
mk.getHeadRevision(), "");
@@ -76,8 +75,6 @@ public class IndexTest {
 
     @Test
     public void move() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         PropertyIndex index = indexer.createPropertyIndex("id", true);
 
         mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 2 }, \"id\": 1 }", 
mk.getHeadRevision(), "");
@@ -91,8 +88,6 @@ public class IndexTest {
 
     @Test
     public void copy() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         PropertyIndex index = indexer.createPropertyIndex("id", false);
 
         mk.commit("/", "+ \"test\": { \"test2\": { \"id\": 2 }, \"id\": 1 }", 
mk.getHeadRevision(), "");
@@ -116,8 +111,6 @@ public class IndexTest {
 
     @Test
     public void ascending() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         BTree tree = new BTree(indexer, "test", true);
         tree.setMinSize(2);
         print(mk, tree);
@@ -159,8 +152,6 @@ public class IndexTest {
     }
 
     private void duplicateKey(boolean unique) {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         BTree tree = new BTree(indexer, "test", unique);
         tree.setMinSize(2);
 
@@ -203,8 +194,6 @@ public class IndexTest {
 
     @Test
     public void random() {
-        Indexer indexer = new Indexer(mk);
-        indexer.init();
         BTree tree = new BTree(indexer, "test", true);
         tree.setMinSize(2);
         Random r = new Random(1);

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java?rev=1349882&r1=1349881&r2=1349882&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PrefixIndexTest.java
 Wed Jun 13 14:42:22 2012
@@ -30,14 +30,14 @@ public class PrefixIndexTest {
     @Test
     public void test() {
         MicroKernel mk = new MicroKernelImpl();
-        Indexer indexer = new Indexer(mk, mk, "index");
+        Indexer indexer = Indexer.getInstance(mk);
         indexer.init();
         PrefixIndex index = indexer.createPrefixIndex("d:");
 
         String head = mk.getHeadRevision();
 
         // meta data
-        String meta = mk.getNodes("/index", head, 1, 0, -1, null);
+        String meta = mk.getNodes(Indexer.INDEX_CONFIG_ROOT, head, 1, 0, -1, 
null);
         
Assert.assertEquals("{\":childNodeCount\":1,\"prefix@d:\":{\":childNodeCount\":0}}",
 meta);
 
         Assert.assertEquals("", getPathList(index, "d:1", head));

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java?rev=1349882&r1=1349881&r2=1349882&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/mk/index/PropertyIndexTest.java
 Wed Jun 13 14:42:22 2012
@@ -29,14 +29,14 @@ public class PropertyIndexTest {
     @Test
     public void test() {
         MicroKernel mk = new MicroKernelImpl();
-        Indexer indexer = new Indexer(mk, mk, "index");
+        Indexer indexer = Indexer.getInstance(mk);
         indexer.init();
         PropertyIndex index = indexer.createPropertyIndex("id", true);
 
         String head = mk.getHeadRevision();
 
         // meta data
-        String meta = mk.getNodes("/index", head, 1, 0, -1, null);
+        String meta = mk.getNodes(Indexer.INDEX_CONFIG_ROOT, head, 1, 0, -1, 
null);
         
Assert.assertEquals("{\":childNodeCount\":1,\"property@id,unique\":{\":childNodeCount\":0}}",
 meta);
 
         String oldHead = head;
@@ -61,7 +61,7 @@ public class PropertyIndexTest {
         Assert.assertEquals("/test/test", index.getPath("3", head));
 
         // Recreate the indexer
-        indexer = new Indexer(mk);
+        indexer = Indexer.getInstance(mk);
         indexer.init();
         index = indexer.createPropertyIndex("id", true);
         head = mk.getHeadRevision();


Reply via email to