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 md...@apache.org on 2015/10/12 09:37:14 UTC

svn commit: r1708045 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file: FileStore.java tooling/ConsistencyChecker.java

Author: mduerig
Date: Mon Oct 12 07:37:13 2015
New Revision: 1708045

URL: http://svn.apache.org/viewvc?rev=1708045&view=rev
Log:
OAK-2881: ConsistencyChecker#checkConsistency can't cope with inconsistent journal
Skip and log invalid revision on file store startup and on consistency check

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1708045&r1=1708044&r2=1708045&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Mon Oct 12 07:37:13 2015
@@ -425,14 +425,19 @@ public class FileStore implements Segmen
         try {
             Iterator<String> heads = journalReader.iterator();
             while (id == null && heads.hasNext()) {
-                RecordId last = RecordId.fromString(tracker, heads.next());
-                SegmentId segmentId = last.getSegmentId();
-                if (containsSegment(
-                        segmentId.getMostSignificantBits(),
-                        segmentId.getLeastSignificantBits())) {
-                    id = last;
-                } else {
-                    log.warn("Unable to access revision {}, rewinding...", last);
+                String head = heads.next();
+                try {
+                    RecordId last = RecordId.fromString(tracker, head);
+                    SegmentId segmentId = last.getSegmentId();
+                    if (containsSegment(
+                            segmentId.getMostSignificantBits(),
+                            segmentId.getLeastSignificantBits())) {
+                        id = last;
+                    } else {
+                        log.warn("Unable to access revision {}, rewinding...", last);
+                    }
+                } catch (IllegalArgumentException e) {
+                    log.warn("Skipping invalid record id {}", head);
                 }
             }
         } finally {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java?rev=1708045&r1=1708044&r2=1708045&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/tooling/ConsistencyChecker.java Mon Oct 12 07:37:13 2015
@@ -78,19 +78,23 @@ public class ConsistencyChecker {
         try {
             int revisionCount = 0;
             for (String revision : journal) {
-                print("Checking revision {}", revision);
-                revisionCount++;
-                String badPath = checker.check(revision, badPaths, binLen);
-                if (badPath == null && fullTraversal) {
-                    badPath = checker.traverse(revision, binLen);
-                }
-                if (badPath == null) {
-                    print("Found latest good revision {}", revision);
-                    print("Searched through {} revisions", revisionCount);
-                    return revision;
-                } else {
-                    badPaths.add(badPath);
-                    print("Broken revision {}", revision);
+                try {
+                    print("Checking revision {}", revision);
+                    revisionCount++;
+                    String badPath = checker.check(revision, badPaths, binLen);
+                    if (badPath == null && fullTraversal) {
+                        badPath = checker.traverse(revision, binLen);
+                    }
+                    if (badPath == null) {
+                        print("Found latest good revision {}", revision);
+                        print("Searched through {} revisions", revisionCount);
+                        return revision;
+                    } else {
+                        badPaths.add(badPath);
+                        print("Broken revision {}", revision);
+                    }
+                } catch (IllegalArgumentException e) {
+                    print("Skipping invalid record id {}", revision);
                 }
             }
         } finally {