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 {