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 2017/05/15 08:35:57 UTC
svn commit: r1795150 - in /jackrabbit/oak/trunk/oak-run/src:
main/java/org/apache/jackrabbit/oak/console/NodeStoreOpener.java
main/java/org/apache/jackrabbit/oak/run/IndexCommand.java
test/java/org/apache/jackrabbit/oak/run/IndexTest.java
Author: chetanm
Date: Mon May 15 08:35:57 2017
New Revision: 1795150
URL: http://svn.apache.org/viewvc?rev=1795150&view=rev
Log:
OAK-6210 - Provide a consistent and extensible way to handle oak-run options while creating NodeStore
-- Remove NodeStoreOpener as its logic is moved to Options
Removed:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/console/NodeStoreOpener.java
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/IndexCommand.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/IndexTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/IndexCommand.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/IndexCommand.java?rev=1795150&r1=1795149&r2=1795150&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/IndexCommand.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/IndexCommand.java Mon May 15 08:35:57 2017
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.oak.run;
-import static java.util.Arrays.asList;
import java.io.BufferedReader;
import java.io.FileReader;
@@ -25,18 +24,25 @@ import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.PrintStream;
import java.io.Reader;
+import java.lang.management.ManagementFactory;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import javax.jcr.query.Query;
@@ -45,19 +51,30 @@ import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
+import com.google.common.util.concurrent.MoreExecutors;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
+import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.commons.json.JsonObject;
import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.commons.json.JsopReader;
import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
+import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.plugins.index.lucene.IndexTracker;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.DocumentQueue;
+import org.apache.jackrabbit.oak.run.cli.NodeStoreFixtureProvider;
+import org.apache.jackrabbit.oak.run.cli.Options;
import org.apache.jackrabbit.oak.run.commons.Command;
import org.apache.jackrabbit.oak.console.NodeStoreFixture;
-import org.apache.jackrabbit.oak.console.NodeStoreOpener;
+import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
public class IndexCommand implements Command {
public static final String INDEX = "index";
@@ -73,18 +90,13 @@ public class IndexCommand implements Com
OptionSpec<String> scriptOption = parser
.accepts("script", "Path to Script").withOptionalArg()
.defaultsTo("");
- OptionSpec<?> helpSpec = parser.acceptsAll(
- asList("h", "?", "help"), "show help").forHelp();
+
+ Options oakOptions = new Options();
+ OptionSet options = oakOptions.parseAndConfigure(parser, args);
+
System.out.println("Opening nodestore...");
- NodeStoreFixture nodeStoreFixture = NodeStoreOpener.open(parser, true, args);
- OptionSet options = parser.parse(args);
- if (options.has(helpSpec)
- || options.nonOptionArguments().isEmpty()) {
- System.out.println("Mode: " + INDEX);
- System.out.println();
- parser.printHelpOn(System.out);
- return;
- }
+ NodeStoreFixture nodeStoreFixture = NodeStoreFixtureProvider.create(oakOptions);
+
NodeStore nodeStore = nodeStoreFixture.getStore();
String script = scriptOption.value(options);
LineNumberReader reader = openScriptReader(script);
@@ -110,7 +122,7 @@ public class IndexCommand implements Com
public void process(NodeStore nodeStore, LineNumberReader reader)
throws Exception {
- session = NodeStoreOpener.openSession(nodeStore);
+ session = openSession(nodeStore);
System.out.println("Nodestore is open");
if (interactive) {
System.out.println("Type \"exit\" to quit");
@@ -459,4 +471,36 @@ public class IndexCommand implements Com
builder.endObject();
}
+ public static Session openSession(NodeStore nodeStore) throws RepositoryException {
+ if (nodeStore == null) {
+ return null;
+ }
+ StatisticsProvider statisticsProvider = StatisticsProvider.NOOP;
+ Oak oak = new Oak(nodeStore).with(ManagementFactory.getPlatformMBeanServer());
+ oak.getWhiteboard().register(StatisticsProvider.class, statisticsProvider, Collections.emptyMap());
+ LuceneIndexProvider provider = createLuceneIndexProvider();
+ oak.with((QueryIndexProvider) provider)
+ .with((Observer) provider)
+ .with(createLuceneIndexEditorProvider());
+ Jcr jcr = new Jcr(oak);
+ Repository repository = jcr.createRepository();
+ return repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
+ }
+
+ private static LuceneIndexEditorProvider createLuceneIndexEditorProvider() {
+ LuceneIndexEditorProvider ep = new LuceneIndexEditorProvider();
+ ScheduledExecutorService executorService = MoreExecutors.getExitingScheduledExecutorService(
+ (ScheduledThreadPoolExecutor) Executors.newScheduledThreadPool(5));
+ StatisticsProvider statsProvider = StatisticsProvider.NOOP;
+ int queueSize = Integer.getInteger("queueSize", 1000);
+ IndexTracker tracker = new IndexTracker();
+ DocumentQueue queue = new DocumentQueue(queueSize, tracker, executorService, statsProvider);
+ ep.setIndexingQueue(queue);
+ return ep;
+ }
+
+ private static LuceneIndexProvider createLuceneIndexProvider() {
+ return new LuceneIndexProvider();
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/IndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/IndexTest.java?rev=1795150&r1=1795149&r2=1795150&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/IndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/run/IndexTest.java Mon May 15 08:35:57 2017
@@ -25,7 +25,6 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.jackrabbit.oak.console.NodeStoreFixture;
-import org.apache.jackrabbit.oak.console.NodeStoreOpener;
import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -107,7 +106,7 @@ public class IndexTest {
try (NodeStoreFixture fixture = memoryFixture();
) {
NodeStore store = fixture.getStore();
- index.session = NodeStoreOpener.openSession(store);
+ index.session = IndexCommand.openSession(store);
assertCommand(index,
combineLines(""),
"{'addNode':'/foo', 'node':{'jcr:primaryType': 'nt:unstructured', 'x': 1, 'y':{}}}",