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();
}
-
+
}