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