You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2012/02/14 13:04:43 UTC

svn commit: r1243889 - in /jackrabbit/sandbox/microkernel/src: main/java/org/apache/jackrabbit/mk/ main/java/org/apache/jackrabbit/mk/index/ main/java/org/apache/jackrabbit/mk/json/ main/java/org/apache/jackrabbit/mk/wrapper/ test/java/org/apache/jackr...

Author: thomasm
Date: Tue Feb 14 12:04:42 2012
New Revision: 1243889

URL: http://svn.apache.org/viewvc?rev=1243889&view=rev
Log:
The index wrapper no longer reads the journal that much (WIP).
Separate methods to reset a Jsop reader and writer.

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopReader.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopWriter.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/wrapper/IndexWrapper.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/MicroKernelImpl.java Tue Feb 14 12:04:42 2012
@@ -285,7 +285,7 @@ public class MicroKernelImpl implements 
                 // addedNodes & removedNodes now only contain information about moved nodes
 
                 // re-build the diff in a 2nd pass, this time representing moves correctly
-                buff.reset();
+                buff.resetWriter();
 
                 // TODO refactor code, avoid duplication
 

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java Tue Feb 14 12:04:42 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.mk.index;
 import org.apache.jackrabbit.mk.MicroKernelImpl;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.json.JsopBuilder;
+import org.apache.jackrabbit.mk.json.JsopReader;
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
 import org.apache.jackrabbit.mk.mem.NodeImpl;
 import org.apache.jackrabbit.mk.mem.NodeMap;
@@ -270,26 +271,44 @@ public class Indexer {
             } while (t.matches(','));
             String rev = map.get("id");
             if (!rev.equals(readRevision)) {
-                updateWith(map.get("changes"), lastRevision);
+                String jsop = map.get("changes");
+                JsopTokenizer tokenizer = new JsopTokenizer(jsop);
+                updateIndex("", tokenizer, lastRevision);
             }
             lastRevision = rev;
             t.read('}');
         } while (t.matches(','));
+        updateEnd(toRevision);
+    }
+
+    /**
+     * Finish updating the index.
+     *
+     * @param toRevision the new index revision
+     * @return the new head revision
+     */
+    public String updateEnd(String toRevision) {
         readRevision = toRevision;
         JsopBuilder jsop = new JsopBuilder();
         jsop.tag('^').key("rev").value(readRevision);
         buffer(jsop.toString());
         commitChanges();
+        return revision;
     }
 
-    private void updateWith(String jsop, String lastRevision) {
-        JsopTokenizer t = new JsopTokenizer(jsop);
+    /**
+     * Update the index with the given changes.
+     *
+     * @param t the changes
+     * @param lastRevision
+     */
+    public void updateIndex(String rootPath, JsopReader t, String lastRevision) {
         while (true) {
             int r = t.read();
             if (r == JsopTokenizer.END) {
                 break;
             }
-            String path = t.readString();
+            String path = PathUtils.concat(rootPath, t.readString());
             switch (r) {
             case '+': {
                 t.read(':');
@@ -385,6 +404,7 @@ public class Indexer {
         if (!mk.nodeExists(nodePath, lastRevision)) {
             return;
         }
+        // TODO remove: support large trees
         String node = mk.getNodes(nodePath, lastRevision, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
         JsopTokenizer t = new JsopTokenizer(node);
         NodeMap map = new NodeMap();
@@ -418,6 +438,7 @@ public class Indexer {
         if (!mk.nodeExists(sourcePath, lastRevision)) {
             return;
         }
+        // TODO move: support large trees
         String node = mk.getNodes(sourcePath, lastRevision, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
         JsopTokenizer t = new JsopTokenizer(node);
         NodeMap map = new NodeMap();
@@ -442,6 +463,7 @@ public class Indexer {
         if (isInIndex(path)) {
             return;
         }
+        // TODO add: support large child node lists
         String node = mk.getNodes(path, readRevision, 0, 0, Integer.MAX_VALUE);
         JsopTokenizer t = new JsopTokenizer(node);
         NodeMap map = new NodeMap();

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopBuilder.java Tue Feb 14 12:04:42 2012
@@ -33,7 +33,7 @@ public class JsopBuilder implements Jsop
     /**
      * Resets this instance.
      */
-    public void reset() {
+    public void resetWriter() {
         needComma = false;
         buff.setLength(0);
     }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopReader.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopReader.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopReader.java Tue Feb 14 12:04:42 2012
@@ -32,4 +32,6 @@ public interface JsopReader {
 
     int getTokenType();
 
+    void resetReader();
+
 }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopStream.java Tue Feb 14 12:04:42 2012
@@ -151,7 +151,11 @@ public class JsopStream implements JsopR
         return this;
     }
 
-    public void reset() {
+    public void resetReader() {
+        pos = 0;
+    }
+
+    public void resetWriter() {
         needComma = false;
         len = 0;
     }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopTokenizer.java Tue Feb 14 12:04:42 2012
@@ -50,6 +50,11 @@ public class JsopTokenizer implements Js
         this(json, 0);
     }
 
+    public void resetReader() {
+        pos = 0;
+        read();
+    }
+
     public String toString() {
         return jsop;
     }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopWriter.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopWriter.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/json/JsopWriter.java Tue Feb 14 12:04:42 2012
@@ -42,7 +42,7 @@ public interface JsopWriter {
 
     JsopWriter newline();
 
-    void reset();
+    void resetWriter();
 
     void setLineLength(int i);
 

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/wrapper/IndexWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/wrapper/IndexWrapper.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/wrapper/IndexWrapper.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/wrapper/IndexWrapper.java Tue Feb 14 12:04:42 2012
@@ -86,7 +86,12 @@ public class IndexWrapper extends Wrappe
 
     public String commitStream(String rootPath, JsopReader jsonDiff, String revisionId, String message) {
         if (!rootPath.startsWith(INDEX_PATH)) {
-            return mk.commitStream(rootPath, jsonDiff, revisionId, message);
+            String rev = mk.commitStream(rootPath, jsonDiff, revisionId, message);
+            jsonDiff.resetReader();
+            indexer.updateIndex(rootPath, jsonDiff, rev);
+            rev = mk.getHeadRevision();
+            rev = indexer.updateEnd(rev);
+            return rev;
         }
         JsopReader t = jsonDiff;
         while (true) {
@@ -104,7 +109,7 @@ public class IndexWrapper extends Wrappe
             case '+':
                 t.read(':');
                 t.read('{');
-                // parse bug ignore
+                // parse but ignore
                 NodeImpl.parse(map, t, 0);
                 path = PathUtils.relativize(INDEX_PATH, path);
                 if (path.startsWith(TYPE_PREFIX)) {

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopStreamTest.java Tue Feb 14 12:04:42 2012
@@ -31,7 +31,7 @@ public class JsopStreamTest extends Test
             for (int i = 0; i < 1000000; i++) {
                 w.value(s);
                 if (i % 100 == 0) {
-                    w.reset();
+                    w.resetWriter();
                 }
             }
             System.out.println(w.getClass() + ": " + timer.seconds());
@@ -57,15 +57,19 @@ public class JsopStreamTest extends Test
     }
 
     private void testRawValue(JsopReader s) {
-        assertFalse(s.matches('-'));
-        assertTrue(s.matches('+'));
-        assertEquals("x", s.read(JsopTokenizer.STRING));
-        s.read(':');
-        assertEquals("{", s.read('{'));
-        assertEquals("y", s.readString());
-        s.read(':');
-        assertEquals("[1,[],2]", s.readRawValue());
-        s.read('}');
+        for (int i = 0; i < 3; i++) {
+            assertFalse(s.matches('-'));
+            assertTrue(s.matches('+'));
+            assertEquals("x", s.read(JsopTokenizer.STRING));
+            s.read(':');
+            assertEquals("{", s.read('{'));
+            assertEquals("y", s.readString());
+            s.read(':');
+            assertEquals("[1,[],2]", s.readRawValue());
+            s.read('}');
+            s.read(JsopTokenizer.END);
+            s.resetReader();
+        }
     }
 
     public void testJsopReader() {
@@ -216,7 +220,7 @@ public class JsopStreamTest extends Test
                 "\"obj\":{\"boolean\":true,\"null\":null," +
                 "\"arr\":[[1,\"\\u001f ~ \\u007f \\u0080\",\"42\"],[]]},\"some\":\"more\"}", json);
 
-        buff.reset();
+        buff.resetWriter();
         buff.array().
                 object().key("x").value("1").endObject().newline().
                 object().key("y").value("2").endObject().newline().

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java?rev=1243889&r1=1243888&r2=1243889&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/json/JsopTest.java Tue Feb 14 12:04:42 2012
@@ -309,7 +309,7 @@ public class JsopTest extends TestCase {
                 "\"obj\":{\"boolean\":true,\"null\":null," +
                 "\"arr\":[[1,\"\\u001f ~ \\u007f \\u0080\",\"42\"],[]]},\"some\":\"more\"}", json);
 
-        buff.reset();
+        buff.resetWriter();
         buff.array().
                 object().key("x").value("1").endObject().newline().
                 object().key("y").value("2").endObject().newline().