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;


Reply via email to