Author: chetanm
Date: Fri May 5 06:07:07 2017
New Revision: 1793944
URL: http://svn.apache.org/viewvc?rev=1793944&view=rev
Log:
OAK-5558 - Consistency checker for Lucene indexes
Dump the status to a writer
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyChecker.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyCheckerTest.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyChecker.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyChecker.java?rev=1793944&r1=1793943&r2=1793944&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyChecker.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyChecker.java
Fri May 5 06:07:07 2017
@@ -24,6 +24,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -57,6 +58,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
public class IndexConsistencyChecker {
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -97,6 +99,33 @@ public class IndexConsistencyChecker {
public List<String> missingBlobIds = new ArrayList<>();
public List<DirectoryStatus> dirStatus = new ArrayList<>();
+
+ public void dump(PrintWriter pw){
+ if (clean) {
+ pw.printf("%s => VALID%n", indexPath);
+ } else {
+ pw.printf("%s => INVALID%n", indexPath);
+ }
+ pw.printf("\t Size : %s%n",
humanReadableByteCount(binaryPropSize));
+
+ if (!missingBlobIds.isEmpty()){
+ pw.println("Missing blobs");
+ for (String id : missingBlobIds) {
+ pw.println("\t - " + id);
+ }
+ }
+
+ if (!invalidBlobIds.isEmpty()){
+ pw.println("Invalid blobs");
+ for (FileSizeStatus status : invalidBlobIds) {
+ pw.println("\t - " + status);
+ }
+ }
+
+ for (DirectoryStatus dirStatus : dirStatus) {
+ dirStatus.dump(pw);
+ }
+ }
}
public static class DirectoryStatus {
@@ -117,6 +146,30 @@ public class IndexConsistencyChecker {
public DirectoryStatus(String dirName) {
this.dirName = dirName;
}
+
+ public void dump(PrintWriter pw) {
+ pw.println("Directory : " + dirName);
+ pw.printf("\t Size : %s%n", humanReadableByteCount(size));
+ pw.printf("\t Num docs : %d%n", numDocs);
+
+ if (!missingFiles.isEmpty()){
+ pw.println("Missing Files");
+ for (String file : missingFiles) {
+ pw.println("\t - " + file);
+ }
+ }
+
+ if (!filesWithSizeMismatch.isEmpty()){
+ pw.println("Invalid files");
+ for (FileSizeStatus status : filesWithSizeMismatch) {
+ pw.println("\t - " + status);
+ }
+ }
+
+ if (status != null){
+ pw.printf("\tCheckIndex status : %s%n", status.clean);
+ }
+ }
}
public static class FileSizeStatus {
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyCheckerTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyCheckerTest.java?rev=1793944&r1=1793943&r2=1793944&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyCheckerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/IndexConsistencyCheckerTest.java
Fri May 5 06:07:07 2017
@@ -23,6 +23,8 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.List;
import javax.annotation.Nonnull;
@@ -64,6 +66,7 @@ public class IndexConsistencyCheckerTest
private NodeState rootState = InitialContent.INITIAL_CONTENT;
private NodeBuilder idx = new IndexDefinitionBuilder().build().builder();
+
@Rule
public final TemporaryFolder temporaryFolder = new TemporaryFolder(new
File("target"));
@@ -94,6 +97,8 @@ public class IndexConsistencyCheckerTest
assertTrue(result.missingBlobs);
assertFalse(result.blobSizeMismatch);
assertEquals(4, result.missingBlobIds.size());
+
+ dumpResult(result);
}
@Test
@@ -112,6 +117,8 @@ public class IndexConsistencyCheckerTest
assertFalse(result.missingBlobs);
assertTrue(result.blobSizeMismatch);
assertEquals(1, result.invalidBlobIds.size());
+
+ dumpResult(result);
}
@Test
@@ -135,6 +142,8 @@ public class IndexConsistencyCheckerTest
result = checker.check(Level.FULL);
assertTrue(result.clean);
assertEquals(2, result.dirStatus.size());
+
+ dumpResult(result);
}
@Test
@@ -150,13 +159,13 @@ public class IndexConsistencyCheckerTest
builder.setChildNode("fooIndex", idx.getNodeState());
NodeState indexState = builder.getNodeState();
- System.out.println(NodeStateUtils.toString(idx.getNodeState()));
-
IndexConsistencyChecker checker = new
IndexConsistencyChecker(indexState, "/fooIndex", temporaryFolder.getRoot());
Result result = checker.check(Level.FULL);
assertFalse(result.clean);
assertEquals(1, result.dirStatus.get(0).missingFiles.size());
assertNull(result.dirStatus.get(0).status);
+
+ dumpResult(result);
}
@Test
@@ -180,7 +189,6 @@ public class IndexConsistencyCheckerTest
builder.setChildNode("fooIndex", idx.getNodeState());
NodeState indexState = builder.getNodeState();
- System.out.println(NodeStateUtils.toString(idx.getNodeState()));
IndexConsistencyChecker checker = new
IndexConsistencyChecker(indexState, "/fooIndex", temporaryFolder.getRoot());
Result result = checker.check(Level.FULL);
@@ -200,6 +208,13 @@ public class IndexConsistencyCheckerTest
dir.close();
}
+ private static void dumpResult(Result result) {
+ StringWriter sw = new StringWriter();
+ result.dump(new PrintWriter(sw));
+
+ System.out.println(sw);
+ }
+
private static class FailingBlob extends ArrayBasedBlob {
static int count;
private final String id;