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 re...@apache.org on 2018/10/17 12:20:02 UTC

svn commit: r1844089 - in /jackrabbit/oak/branches/1.8: ./ oak-doc/src/site/markdown/query/index-management.md oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java

Author: reschke
Date: Wed Oct 17 12:20:01 2018
New Revision: 1844089

URL: http://svn.apache.org/viewvc?rev=1844089&view=rev
Log:
OAK-7847: complete "Indexing tooling via oak-run" in Oak 1.8 (introduced in OAK-6081)

Modified:
    jackrabbit/oak/branches/1.8/   (props changed)
    jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/query/index-management.md
    jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java
    jackrabbit/oak/branches/1.8/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java

Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Oct 17 12:20:01 2018
@@ -1,3 +1,3 @@
 /jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826932,1826957,1827423,1827472,1827486,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1830911,1830923,1831157-1831158
 ,1831163,1831190,1831374,1831560,1831689,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834112,1834117,1834287,1834291,1834302,1834326,1834328,1834336,1834428,1834468,1834483,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835521,1835635,1835642,1835780,1835819,1836121,1836487,1836493,1837057,1837274,1837296,1837326,1837475,1837503,1837547,1837569,1837600,1837657,1837718,1837998,1838076,1838637,1839549,1839570,1839637,1839746,1840024,1840455,1840574,1841314,1841352,1843398
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821027,1821130,1821140-1821141,1821178,1821237,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821617,1821663,1821665,1821668,1821681,1821847,1821975-1821983,1822121,1822201,1822207,1822527,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1823172,1823655,1823669,1824196,1824198,1824253,1824255,1824896,1824962,1825065,1825362,1825381,1825442,1825448,1825466,1825470-1825471,1825475,1825523,1825525,1825561,1825619-1825621,1825651,1825654,1825992,1826079,1826090,1826096,1826216,1826237,1826338,1826516,1826532,1826551,1826560,1826638,1826640,1826730,1826932,1826957,1827423,1827472,1827486,1827816,1827977,1828349,1828439,1828502,1828529,1828948,1829527,1829534,1829546,1829569,1829587,1829665,1829854,1829864,1829978,1829985,1829987,1829998,1830019,1830048,1830160,1830171,1830197,1830209,1830239,1830347,1830748,1830911,1830923,1831157
 -1831158,1831163,1831190,1831374,1831560,1831689,1832258,1832376,1832379,1832535,1833308,1833347,1833833,1834112,1834117,1834287,1834291,1834302,1834326,1834328,1834336,1834428,1834468,1834483,1834610,1834648-1834649,1834681,1834823,1834857-1834858,1835060,1835518,1835521,1835635,1835642,1835780,1835819,1836121,1836487,1836493,1837057,1837274,1837296,1837326,1837475,1837503,1837547,1837569,1837600,1837657,1837718,1837998,1838076,1838637,1839549,1839570,1839637,1839746,1840024,1840455,1840574,1841314,1841352,1843398
 /jackrabbit/trunk:1345480

Modified: jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/query/index-management.md
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/query/index-management.md?rev=1844089&r1=1844088&r2=1844089&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/query/index-management.md (original)
+++ jackrabbit/oak/branches/1.8/oak-doc/src/site/markdown/query/index-management.md Wed Oct 17 12:20:01 2018
@@ -33,7 +33,12 @@ To start the interactive mode,
 with the branch-less commit option, and MongoDB, use:
 
     java -jar oak-run-*.jar json-index --disableBranches --script - \
-      mongodb://localhost:27017/oak
+      mongodb://localhost:27017/oak --user admin --password admin
+
+When using the segment store, use:      
+
+    java -jar oak-run-*.jar json-index --disableBranches --script - \
+      repository/segmentstore --read-write --user admin --password admin
 
 This will open the repository and allow to write and read from the repository.
 An example script creates an index "test", and then re-indexes it:
@@ -144,7 +149,7 @@ The following script created the index e
     ]}
     exit
     
-#### Create Nodex for Testing
+#### Create Nodes for Testing
 
 The tool can also be used for testing queries, and creating nodes.
 The following creates 1000 nodes `/test/n<x>`, saving every 100 nodes:
@@ -171,3 +176,11 @@ The following creates 1000 nodes `/test/
     {"print": "done"}
     exit
 
+#### Estimate the Number of Nodes
+
+The following will estimate the number of nodes in a given subtree.
+
+    {"xpath": "explain measure /jcr:root/content//* option(traversal ok)"}
+    exit
+    
+The field "cost" will contain the number of estimated nodes.

Modified: jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java?rev=1844089&r1=1844088&r2=1844089&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java (original)
+++ jackrabbit/oak/branches/1.8/oak-run/src/main/java/org/apache/jackrabbit/oak/run/JsonIndexCommand.java Wed Oct 17 12:20:01 2018
@@ -90,6 +90,12 @@ public class JsonIndexCommand implements
         OptionSpec<String> scriptOption = parser
                 .accepts("script", "Path to Script").withOptionalArg()
                 .defaultsTo("");
+        OptionSpec<String> userOption = parser
+                .accepts("user", "User name").withOptionalArg()
+                .defaultsTo("admin");
+        OptionSpec<String> passwordOption = parser
+                .accepts("password", "Password").withOptionalArg()
+                .defaultsTo("admin");
 
         Options oakOptions = new Options();
         OptionSet options = oakOptions.parseAndConfigure(parser, args);
@@ -99,9 +105,11 @@ public class JsonIndexCommand implements
 
         NodeStore nodeStore = nodeStoreFixture.getStore();
         String script = scriptOption.value(options);
+        String user = userOption.value(options);
+        String password = passwordOption.value(options);
         LineNumberReader reader = openScriptReader(script);
         try {
-            process(nodeStore, reader);
+            process(nodeStore, reader, user, password);
         } finally {
             nodeStoreFixture.close();
             reader.close();
@@ -120,9 +128,9 @@ public class JsonIndexCommand implements
         return new LineNumberReader(new BufferedReader(reader));
     }
 
-    public void process(NodeStore nodeStore, LineNumberReader reader)
+    public void process(NodeStore nodeStore, LineNumberReader reader, String user, String password)
             throws Exception {
-        session = openSession(nodeStore);
+        session = openSession(nodeStore, user, password);
         System.out.println("Nodestore is open");
         if (interactive) {
             System.out.println("Type \"exit\" to quit");
@@ -176,7 +184,7 @@ public class JsonIndexCommand implements
             }
         }
     }
-    
+
     void execute(String command) throws RepositoryException {
         JsopTokenizer t = new JsopTokenizer(command);
         t.read('{');
@@ -471,7 +479,7 @@ public class JsonIndexCommand implements
         builder.endObject();
     }
 
-    public static Session openSession(NodeStore nodeStore) throws RepositoryException {
+    public static Session openSession(NodeStore nodeStore, String user, String password) throws RepositoryException {
         if (nodeStore == null) {
             return null;
         }
@@ -484,7 +492,7 @@ public class JsonIndexCommand implements
                 .with(createLuceneIndexEditorProvider());
         Jcr jcr = new Jcr(oak);
         Repository repository = jcr.createRepository();
-        return repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
+        return repository.login(new SimpleCredentials(user, password.toCharArray()));
     }
 
     private static LuceneIndexEditorProvider createLuceneIndexEditorProvider() {

Modified: jackrabbit/oak/branches/1.8/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java?rev=1844089&r1=1844088&r2=1844089&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java (original)
+++ jackrabbit/oak/branches/1.8/oak-run/src/test/java/org/apache/jackrabbit/oak/run/JsonIndexTest.java Wed Oct 17 12:20:01 2018
@@ -38,39 +38,39 @@ public class JsonIndexTest {
     @Test
     public void simple() throws Exception {
         assertCommand(
-                combineLines("hello"), 
+                combineLines("hello"),
                 "{'print':'hello'}");
         assertCommand(
-                combineLines("false"), 
+                combineLines("false"),
                 "{'print':false}");
         assertCommand(
-                combineLines("1", "2", "3"), 
+                combineLines("1", "2", "3"),
                 "{'$x':[1, 2, 3]}",
                 "{'for':'$x', 'do': [{'print': '$x'}]}");
         assertCommand(
-                combineLines("x1", "x2", "x3"), 
-                "{'$myFunction':[{'$y': 'x', '+': '$x'}, {'print':'$y'}]}",                
+                combineLines("x1", "x2", "x3"),
+                "{'$myFunction':[{'$y': 'x', '+': '$x'}, {'print':'$y'}]}",
                 "{'$x':[1, 2, 3]}",
                 "{'for':'$x', 'do': '$myFunction'}");
         assertCommand(
-                combineLines("2", "4", "8"), 
+                combineLines("2", "4", "8"),
                 "{'$x':1}",
                 "{'loop':[{'$x': '$x', '+':'$x'}, {'print': '$x'}, {'$break': true, 'if': '$x', '=': 8}]}");
         assertCommand(
-                combineLines("b", "d"), 
+                combineLines("b", "d"),
                 "{'$x':1}",
                 "{'print':'a', 'if':'$x', '=':null}",
                 "{'print':'b', 'if':'$x', '=':1}",
                 "{'print':'c', 'if':null, '=':1}",
                 "{'print':'d', 'if':null, '=':null}");
         assertCommand(
-                combineLines("10", "10"), 
+                combineLines("10", "10"),
                 "{'$x':1}",
                 "{'$$x':10}",
                 "{'print':'$1'}",
                 "{'print':'$$x'}");
         assertCommand(
-                combineLines("1", "null", "1", "2", "a1"), 
+                combineLines("1", "null", "1", "2", "a1"),
                 "{'$x':1, '+':null}",
                 "{'print':'$x'}",
                 "{'$x':null, '+':null}",
@@ -82,7 +82,7 @@ public class JsonIndexTest {
                 "{'$x':'a', '+':'1'}",
                 "{'print':'$x'}");
     }
-    
+
     private static NodeStoreFixture memoryFixture() {
         return new NodeStoreFixture() {
             private final Whiteboard whiteboard = new DefaultWhiteboard();
@@ -112,30 +112,30 @@ public class JsonIndexTest {
             }
         };
     }
-    
+
     @Test
     public void readWrite() throws Exception {
         JsonIndexCommand index = new JsonIndexCommand();
         try (NodeStoreFixture fixture = memoryFixture()) {
             NodeStore store = fixture.getStore();
-            index.session = JsonIndexCommand.openSession(store);
-            assertCommand(index, 
+            index.session = JsonIndexCommand.openSession(store, "admin", "admin");
+            assertCommand(index,
                     combineLines(""),
-                    "{'addNode':'/foo', 'node':{'jcr:primaryType': 'nt:unstructured', 'x': 1, 'y':{}}}", 
+                    "{'addNode':'/foo', 'node':{'jcr:primaryType': 'nt:unstructured', 'x': 1, 'y':{}}}",
                     "{'session': 'save'}");
-            assertCommand(index, 
+            assertCommand(index,
                     combineLines("/foo", "/jcr:system", "/oak:index", "/rep:security"),
                     "{'xpath':'/jcr:root/* order by @jcr:path'}");
-            assertCommand(index, 
+            assertCommand(index,
                     combineLines("/oak:index/counter"),
-                    "{'xpath':'/jcr:root//element(*, oak:QueryIndexDefinition)[@type=`counter`] " + 
+                    "{'xpath':'/jcr:root//element(*, oak:QueryIndexDefinition)[@type=`counter`] " +
                         "order by @jcr:path'}");
-            assertCommand(index, 
-                    combineLines("[nt:unstructured] as [a] /* property test = 1 " + 
+            assertCommand(index,
+                    combineLines("[nt:unstructured] as [a] /* property test = 1 " +
                             "where ([a].[x] = 1) and (isdescendantnode([a], [/])) */"),
-                    "{'addNode':'/oak:index/test', 'node':{ " + 
-                        "'jcr:primaryType':'oak:QueryIndexDefinition', " + 
-                        "'type':'property', " + 
+                    "{'addNode':'/oak:index/test', 'node':{ " +
+                        "'jcr:primaryType':'oak:QueryIndexDefinition', " +
+                        "'type':'property', " +
                         "'reindex':true, " +
                         "'entryCount': 1, " +
                         "'{Name}declaringNodeTypes': ['nt:unstructured'], " +
@@ -145,15 +145,15 @@ public class JsonIndexTest {
                     "{'xpath':'explain /jcr:root//element(*, nt:unstructured)[@x=1]'}",
                     "{'xpath':'/jcr:root//element(*, nt:unstructured)[@x=2]'}"
                     );
-            assertCommand(index, 
+            assertCommand(index,
                     combineLines("50"),
                     "{'addNode':'/foo/test', 'node':{'jcr:primaryType': 'oak:Unstructured', 'child':{}}}",
                     "{'$x':1}",
-                    "{'loop':[" + 
-                            "{'$p': '/foo/test/child/n', '+': '$x'}, " + 
-                            "{'addNode': '$p', 'node': {'x': '$x', 'jcr:primaryType': 'nt:unstructured'}}, " + 
+                    "{'loop':[" +
+                            "{'$p': '/foo/test/child/n', '+': '$x'}, " +
+                            "{'addNode': '$p', 'node': {'x': '$x', 'jcr:primaryType': 'nt:unstructured'}}, " +
                             "{'session':'save'}, " +
-                            "{'$x': '$x', '+':1}, " + 
+                            "{'$x': '$x', '+':1}, " +
                             "{'$break': true, 'if': '$x', '=': 100}]}",
                     "{'session':'save'}",
                     "{'xpath':'/jcr:root//element(*, nt:unstructured)[@x<50]', 'quiet':true}",
@@ -161,24 +161,24 @@ public class JsonIndexTest {
                     "{'for':'$result', 'do': [{'$y': '$y', '+': 1}]}",
                     "{'print': '$y'}"
                     );
-            assertCommand(index, 
-                    combineLines("[nt:unstructured] as [a] /* nodeType Filter(query=" + 
-                            "explain select [jcr:path], [jcr:score], * from [nt:unstructured] as a " + 
-                            "where [x] = 1 and isdescendantnode(a, '/') /* xpath: " + 
-                            "/jcr:root//element(*, nt:unstructured)[@x=1] */, path=//*, " + 
+            assertCommand(index,
+                    combineLines("[nt:unstructured] as [a] /* nodeType Filter(query=" +
+                            "explain select [jcr:path], [jcr:score], * from [nt:unstructured] as a " +
+                            "where [x] = 1 and isdescendantnode(a, '/') /* xpath: " +
+                            "/jcr:root//element(*, nt:unstructured)[@x=1] */, path=//*, " +
                             "property=[x=[1]]) where ([a].[x] = 1) and (isdescendantnode([a], [/])) */"),
                     "{'setProperty': '/oak:index/test/type', 'value': 'disabled'}",
                     "{'session':'save'}",
                     "{'xpath':'explain /jcr:root//element(*, nt:unstructured)[@x=1]'}"
                     );
-            assertCommand(index, 
-                    combineLines("[nt:unstructured] as [a] /* traverse '*' " + 
+            assertCommand(index,
+                    combineLines("[nt:unstructured] as [a] /* traverse '*' " +
                             "where [a].[x] = 1 */"),
                     "{'removeNode': '/oak:index/nodetype'}",
                     "{'session':'save'}",
                     "{'sql':'explain select * from [nt:unstructured] as [a] where [x]=1'}"
                     );
-            assertCommand(index, 
+            assertCommand(index,
                     combineLines("['/foo': {\n" +
                             "  'jcr:primaryType': 'nt:unstructured', '{Long}x': '1', 'y': {}, 'test': {}\n" +
                             "}]"),
@@ -187,7 +187,7 @@ public class JsonIndexTest {
             index.session.logout();
         }
     }
-    
+
     void assertCommand(String expected, String... commands) throws Exception {
         assertCommand(new JsonIndexCommand(), expected, commands);
     }
@@ -203,7 +203,7 @@ public class JsonIndexTest {
         got = got.trim().replace('"', '\'');
         assertEquals(expected, got);
     }
-    
+
     static String combineLines(String... lines) {
         StringWriter w = new StringWriter();
         PrintWriter p = new PrintWriter(w);
@@ -212,5 +212,5 @@ public class JsonIndexTest {
         }
         return w.toString().trim();
     }
-    
+
 }