Author: chetanm
Date: Tue May 16 16:33:31 2017
New Revision: 1795338
URL: http://svn.apache.org/viewvc?rev=1795338&view=rev
Log:
OAK-6081 - Indexing tooling via oak-run
`--index-paths` option enabled support for selecting index paths on which
various actions like dumping stats, definitions etc need to be performed
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexHelper.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexOptionsTest.java
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java?rev=1795338&r1=1795337&r2=1795338&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexCommand.java
Tue May 16 16:33:31 2017
@@ -24,7 +24,6 @@ import java.io.IOException;
import java.nio.file.Path;
import joptsimple.OptionParser;
-import joptsimple.OptionSet;
import org.apache.felix.inventory.Format;
import org.apache.jackrabbit.oak.console.NodeStoreFixture;
import org.apache.jackrabbit.oak.run.cli.NodeStoreFixtureProvider;
@@ -67,7 +66,8 @@ public class IndexCommand implements Com
}
private void execute(NodeStore store, IndexOptions indexOpts) throws
IOException {
- IndexHelper indexHelper = new IndexHelper(store,
indexOpts.getOutDir(), indexOpts.getWorkDir());
+ IndexHelper indexHelper = new IndexHelper(store, indexOpts.getOutDir(),
+ indexOpts.getWorkDir(), indexOpts.getIndexPaths());
dumpIndexStats(indexOpts, indexHelper);
dumpIndexDefinitions(indexOpts, indexHelper);
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexHelper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexHelper.java?rev=1795338&r1=1795337&r2=1795338&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexHelper.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexHelper.java
Tue May 16 16:33:31 2017
@@ -20,6 +20,7 @@
package org.apache.jackrabbit.oak.index;
import java.io.File;
+import java.util.List;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexInfoService;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexInfoServiceImpl;
@@ -40,11 +41,13 @@ class IndexHelper {
private IndexInfoServiceImpl indexInfoService;
private IndexPathService indexPathService;
private AsyncIndexInfoService asyncIndexInfoService;
+ private final List<String> indexPaths;
- IndexHelper(NodeStore store, File outputDir, File workDir) {
+ IndexHelper(NodeStore store, File outputDir, File workDir, List<String>
indexPaths) {
this.store = store;
this.outputDir = outputDir;
this.workDir = workDir;
+ this.indexPaths = indexPaths;
}
public File getOutputDir() {
@@ -61,7 +64,11 @@ class IndexHelper {
private IndexPathService getIndexPathService() {
if (indexPathService == null) {
- indexPathService = new IndexPathServiceImpl(store);
+ if (indexPaths.isEmpty()) {
+ indexPathService = new IndexPathServiceImpl(store);
+ } else {
+ indexPathService = () -> indexPaths;
+ }
}
return indexPathService;
}
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java?rev=1795338&r1=1795337&r2=1795338&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexOptions.java
Tue May 16 16:33:31 2017
@@ -21,9 +21,14 @@ package org.apache.jackrabbit.oak.index;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Set;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
@@ -46,6 +51,7 @@ public class IndexOptions implements Opt
private final OptionSpec<Void> definitions;
private OptionSet options;
private final Set<OptionSpec> actionOpts;
+ private final OptionSpec<String> indexPaths;
public IndexOptions(OptionParser parser){
@@ -55,6 +61,9 @@ public class IndexOptions implements Opt
.withRequiredArg().ofType(File.class).defaultsTo(new
File("."));
stats = parser.accepts("index-info", "Collects and dumps information
related to the indexes");
definitions = parser.accepts("index-definitions", "Collects and dumps
index definitions");
+ indexPaths = parser.accepts("index-paths", "Comma separated list of
index paths for which the " +
+ "selected operations need to be performed")
+
.withRequiredArg().ofType(String.class).withValuesSeparatedBy(",");
//Set of options which define action
actionOpts = ImmutableSet.of(stats, definitions);
@@ -83,6 +92,10 @@ public class IndexOptions implements Opt
return options.has(definitions) || !anyActionSelected();
}
+ public List<String> getIndexPaths(){
+ return options.has(indexPaths) ? trim(indexPaths.values(options)) :
Collections.emptyList();
+ }
+
private boolean anyActionSelected(){
for (OptionSpec spec : actionOpts){
if (options.has(spec)){
@@ -90,6 +103,16 @@ public class IndexOptions implements Opt
}
}
return false;
+ }
+ private static List<String> trim(List<String> values) {
+ Set<String> paths = Sets.newHashSet();
+ for (String v : values) {
+ v = Strings.emptyToNull(v);
+ if (v != null) {
+ paths.add(v.trim());
+ }
+ }
+ return new ArrayList<>(paths);
}
}
Modified:
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.java?rev=1795338&r1=1795337&r2=1795338&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.java
Tue May 16 16:33:31 2017
@@ -38,6 +38,7 @@ import org.junit.rules.TemporaryFolder;
import static java.nio.charset.Charset.defaultCharset;
import static org.apache.jackrabbit.commons.JcrUtils.getOrCreateByPath;
import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -83,6 +84,34 @@ public class IndexCommandIT {
assertThat(Files.toString(info, defaultCharset()),
containsString("/oak:index/fooIndex"));
}
+ @Test
+ public void selectedIndexPaths() throws Exception{
+ createTestData();
+ //Close the repository so as all changes are flushed
+ fixture.close();
+
+ IndexCommand command = new IndexCommand();
+
+ File outDir = temporaryFolder.newFolder();
+ String[] args = {
+ "-index-work-dir=" +
temporaryFolder.newFolder().getAbsolutePath(),
+ "-index-out-dir=" + outDir.getAbsolutePath(),
+ "-index-paths=/oak:index/fooIndex",
+ "-index-info",
+ "-index-definitions",
+ fixture.getDir().getAbsolutePath()
+ };
+
+ command.execute(args);
+
+ File info = new File(outDir, IndexCommand.INDEX_INFO_TXT);
+
+ assertTrue(info.exists());
+
+ assertThat(Files.toString(info, defaultCharset()),
not(containsString("/oak:index/uuid")));
+ assertThat(Files.toString(info, defaultCharset()),
containsString("/oak:index/fooIndex"));
+ }
+
private void createTestData() throws IOException, RepositoryException {
fixture = new RepositoryFixture(temporaryFolder.newFolder());
indexIndexDefinitions();
Modified:
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexOptionsTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexOptionsTest.java?rev=1795338&r1=1795337&r2=1795338&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexOptionsTest.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexOptionsTest.java
Tue May 16 16:33:31 2017
@@ -19,11 +19,14 @@
package org.apache.jackrabbit.oak.index;
+import java.util.List;
+
import joptsimple.OptionParser;
import org.apache.jackrabbit.oak.run.cli.Options;
import org.junit.Before;
import org.junit.Test;
+import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.*;
public class IndexOptionsTest {
@@ -56,4 +59,14 @@ public class IndexOptionsTest {
assertTrue(idxOpts.dumpStats());
}
+ @Test
+ public void indexPathsAreTrimmed() throws Exception{
+ options.parseAndConfigure(parser, new String[] {"--index-paths=foo,
bar, baz ,"});
+
+ IndexOptions idxOpts = options.getOptionBean(IndexOptions.class);
+ List<String> paths = idxOpts.getIndexPaths();
+ assertEquals(3, paths.size());
+ assertThat(paths, hasItems("foo", "bar", "baz"));
+ }
+
}
\ No newline at end of file