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/05 06:08:07 UTC
svn commit: r1793949 - in
/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene:
LuceneIndexMBean.java LuceneIndexMBeanImpl.java
LuceneIndexProviderService.java
Author: chetanm
Date: Fri May 5 06:08:07 2017
New Revision: 1793949
URL: http://svn.apache.org/viewvc?rev=1793949&view=rev
Log:
OAK-5558 - Consistency checker for Lucene indexes
-- Add checkConsistency operation to LuceneIndexMBean to initiate
consistency check via JMX
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java?rev=1793949&r1=1793948&r2=1793949&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBean.java Fri May 5 06:08:07 2017
@@ -69,4 +69,12 @@ public interface LuceneIndexMBean {
"string form")
String diffStoredIndexDefinition(@Name("indexPath") String indexPath);
+ @Description("Performs consistency check on given index")
+ String checkConsistency(@Name("indexPath") String indexPath,
+ @Name("fullCheck")
+ @Description("If set to true a full check would be performed which can be slow as " +
+ "it reads all index files. If set to false a quick check is performed to " +
+ "check if all blobs referred in index files are present in BlobStore")
+ boolean fullCheck) throws IOException;
+
}
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java?rev=1793949&r1=1793948&r2=1793949&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexMBeanImpl.java Fri May 5 06:08:07 2017
@@ -40,16 +40,20 @@ import javax.management.openmbean.Tabula
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.common.collect.TreeTraverser;
+import org.apache.jackrabbit.oak.api.jmx.Name;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
-import org.apache.jackrabbit.oak.api.jmx.Name;
import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.json.JsopDiff;
import org.apache.jackrabbit.oak.plugins.index.lucene.BadIndexTracker.BadIndexInfo;
import org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.PathStoredFieldVisitor;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.IndexConsistencyChecker;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.IndexConsistencyChecker.Level;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.IndexConsistencyChecker.Result;
import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReader;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.Fields;
import org.apache.lucene.index.IndexReader;
@@ -68,6 +72,7 @@ import org.apache.lucene.store.IOContext
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
import static org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition.INDEX_DEFINITION_NODE;
@@ -77,10 +82,14 @@ import static org.apache.jackrabbit.oak.
public class LuceneIndexMBeanImpl extends AnnotatedStandardMBean implements LuceneIndexMBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final IndexTracker indexTracker;
+ private final NodeStore nodeStore;
+ private final File workDir;
- public LuceneIndexMBeanImpl(IndexTracker indexTracker) {
+ public LuceneIndexMBeanImpl(IndexTracker indexTracker, NodeStore nodeStore, File workDir) {
super(LuceneIndexMBean.class);
- this.indexTracker = indexTracker;
+ this.indexTracker = checkNotNull(indexTracker);
+ this.nodeStore = checkNotNull(nodeStore);
+ this.workDir = checkNotNull(workDir);
}
@Override
@@ -241,6 +250,20 @@ public class LuceneIndexMBeanImpl extend
return "No stored index definition found at given path";
}
+ @Override
+ public String checkConsistency(String indexPath, boolean fullCheck) throws IOException {
+ NodeState indexState = NodeStateUtils.getNode(nodeStore.getRoot(), indexPath);
+ checkArgument(indexState.exists(), "No node exist at path [%s]", indexPath);
+ return getConsistencyCheckResult(indexPath, fullCheck).toString();
+ }
+
+ private Result getConsistencyCheckResult(String indexPath, boolean fullCheck) throws IOException {
+ NodeState root = nodeStore.getRoot();
+ Level level = fullCheck ? Level.FULL : Level.BLOBS_ONLY;
+ IndexConsistencyChecker checker = new IndexConsistencyChecker(root, indexPath, workDir);
+ return checker.check(level);
+ }
+
public void dumpIndexContent(String sourcePath, String destPath) throws IOException {
IndexNode indexNode = null;
try {
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java?rev=1793949&r1=1793948&r2=1793949&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexProviderService.java Fri May 5 06:08:07 2017
@@ -310,7 +310,7 @@ public class LuceneIndexProviderService
oakRegs.add(registerMBean(whiteboard,
LuceneIndexMBean.class,
- new LuceneIndexMBeanImpl(indexProvider.getTracker()),
+ new LuceneIndexMBeanImpl(indexProvider.getTracker(), nodeStore, new File(indexDir, "indexCheckDir")),
LuceneIndexMBean.TYPE,
"Lucene Index statistics"));
registerGCMonitor(whiteboard, indexProvider.getTracker());