Author: chetanm
Date: Thu May 18 06:28:14 2017
New Revision: 1795480

URL: http://svn.apache.org/viewvc?rev=1795480&view=rev
Log:
OAK-6231 - Enable dumping index content via oak-run

Index content can be dumped by `--index-dump` option

Added:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java
   (with props)
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/IndexOptions.java
    
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/IndexCommandIT.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=1795480&r1=1795479&r2=1795480&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
 Thu May 18 06:28:14 2017
@@ -78,6 +78,13 @@ public class IndexCommand implements Com
         dumpIndexStats(indexOpts, indexHelper);
         dumpIndexDefinitions(indexOpts, indexHelper);
         performConsistencyCheck(indexOpts, indexHelper);
+        dumpIndexContents(indexOpts, indexHelper);
+    }
+
+    private void dumpIndexContents(IndexOptions indexOpts, IndexHelper 
indexHelper) throws IOException {
+        if (indexOpts.dumpIndex()) {
+            new IndexDumper(indexHelper, indexOpts.getOutDir()).dump();
+        }
     }
 
     private void performConsistencyCheck(IndexOptions indexOpts, IndexHelper 
indexHelper) throws IOException {
@@ -109,7 +116,7 @@ public class IndexCommand implements Com
         }
     }
 
-    private static Path getPath(File file) {
+    static Path getPath(File file) {
         return file.toPath().normalize().toAbsolutePath();
     }
 }

Added: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java?rev=1795480&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java
 Thu May 18 06:28:14 2017
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.jackrabbit.oak.index;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.jackrabbit.oak.commons.IOUtils;
+import 
org.apache.jackrabbit.oak.plugins.index.lucene.directory.LuceneIndexDumper;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
+
+import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
+import static 
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.TYPE_LUCENE;
+
+public class IndexDumper {
+    public static final String INDEX_DUMPS_DIR = "index-dumps";
+    private final IndexHelper indexHelper;
+    private final File outDir;
+
+    public IndexDumper(IndexHelper indexHelper, File outDir) {
+        this.indexHelper = indexHelper;
+        this.outDir = outDir;
+    }
+
+    public void dump() throws IOException {
+        NodeState root = indexHelper.getNodeStore().getRoot();
+        File indexDumpDir = new File(outDir, INDEX_DUMPS_DIR);
+
+        FileUtils.forceMkdir(indexDumpDir);
+        long totalSize = 0;
+        int indexCount = 0;
+
+        for (String indexPath : 
indexHelper.getIndexPathService().getIndexPaths()) {
+            NodeState indexState = NodeStateUtils.getNode(root, indexPath);
+            if (!TYPE_LUCENE.equals(indexState.getString(TYPE_PROPERTY_NAME))) 
{
+                continue;
+            }
+            LuceneIndexDumper dumper = new LuceneIndexDumper(root, indexPath, 
indexDumpDir);
+            dumper.dump();
+            System.out.printf("    - %s (%s)%n", indexPath, 
IOUtils.humanReadableByteCount(dumper.getSize()));
+
+            indexCount++;
+            totalSize += dumper.getSize();
+        }
+
+        System.out.printf("Dumped index data of %d indexes (%s) to %s%n", 
indexCount,
+                IOUtils.humanReadableByteCount(totalSize), 
IndexCommand.getPath(indexDumpDir));
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/IndexDumper.java
------------------------------------------------------------------------------
    svn:eol-style = native

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=1795480&r1=1795479&r2=1795480&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
 Thu May 18 06:28:14 2017
@@ -49,6 +49,7 @@ public class IndexOptions implements Opt
     private final OptionSpec<File> outputDirOpt;
     private final OptionSpec<Void> stats;
     private final OptionSpec<Void> definitions;
+    private final OptionSpec<Void> dumpIndex;
     private final OptionSpec<Integer> consistencyCheck;
     private OptionSet options;
     private final Set<OptionSpec> actionOpts;
@@ -71,8 +72,10 @@ public class IndexOptions implements Opt
                 "this is only supported for Lucene indexes. Possible values 1 
- Basic check, 2 - Full check (slower)")
                 .withOptionalArg().ofType(Integer.class).defaultsTo(1);
 
+        dumpIndex = parser.accepts("index-dump", "Dumps index content");
+
         //Set of options which define action
-        actionOpts = ImmutableSet.of(stats, definitions, consistencyCheck);
+        actionOpts = ImmutableSet.of(stats, definitions, consistencyCheck, 
dumpIndex);
     }
 
     @Override
@@ -98,6 +101,10 @@ public class IndexOptions implements Opt
         return options.has(definitions) || !anyActionSelected();
     }
 
+    public boolean dumpIndex() {
+        return options.has(dumpIndex);
+    }
+
     public boolean checkConsistency(){
         return options.has(consistencyCheck);
     }

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=1795480&r1=1795479&r2=1795480&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
 Thu May 18 06:28:14 2017
@@ -141,6 +141,28 @@ public class IndexCommandIT {
         assertThat(Files.toString(report, defaultCharset()), 
containsString("/oak:index/fooIndex"));
     }
 
+    @Test
+    public void dumpIndex() 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-dump",
+                "--", // -- indicates that options have ended and rest needs 
to be treated as non option
+                fixture.getDir().getAbsolutePath()
+        };
+
+        command.execute(args);
+        File dumpDir = new File(outDir, IndexDumper.INDEX_DUMPS_DIR);
+        assertTrue(dumpDir.exists());
+    }
+
     private void createTestData() throws IOException, RepositoryException {
         fixture = new RepositoryFixture(temporaryFolder.newFolder());
         indexIndexDefinitions();


Reply via email to