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


Reply via email to