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 ad...@apache.org on 2017/02/28 10:23:54 UTC
svn commit: r1784718 -
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
Author: adulceanu
Date: Tue Feb 28 10:23:54 2017
New Revision: 1784718
URL: http://svn.apache.org/viewvc?rev=1784718&view=rev
Log:
OAK-5753 - Consistency check incorrectly fails for broken partial paths
Added revision date to summary log message
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1784718&r1=1784717&r2=1784718&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java Tue Feb 28 10:23:54 2017
@@ -20,6 +20,7 @@
package org.apache.jackrabbit.oak.segment.file.tooling;
import static com.google.common.collect.Maps.newHashMap;
+import static java.text.DateFormat.getDateTimeInstance;
import static org.apache.jackrabbit.oak.api.Type.BINARIES;
import static org.apache.jackrabbit.oak.api.Type.BINARY;
import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
@@ -36,6 +37,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.MessageFormat;
+import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -50,6 +52,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.segment.file.IOMonitorAdapter;
import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
+import org.apache.jackrabbit.oak.segment.file.JournalEntry;
import org.apache.jackrabbit.oak.segment.file.JournalReader;
import org.apache.jackrabbit.oak.segment.file.ReadOnlyFileStore;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -122,7 +125,7 @@ public class ConsistencyChecker implemen
JournalReader journal = new JournalReader(new File(directory, journalFileName));
ConsistencyChecker checker = new ConsistencyChecker(directory, debugInterval, ioStatistics, outWriter, errWriter)
) {
- Map<String, String> pathToValidRevision = newHashMap();
+ Map<String, JournalEntry> pathToJournalEntry = newHashMap();
Map<String, Set<String>> pathToCorruptPaths = newHashMap();
for (String path : filterPaths) {
pathToCorruptPaths.put(path, new HashSet<String>());
@@ -132,21 +135,21 @@ public class ConsistencyChecker implemen
int revisionCount = 0;
while (journal.hasNext() && count < filterPaths.size()) {
- String revision = journal.next().getRevision();
- checker.print("Checking revision {0}", revision);
+ JournalEntry journalEntry = journal.next();
+ checker.print("Checking revision {0}", journalEntry.getRevision());
try {
revisionCount++;
for (String path : filterPaths) {
- if (pathToValidRevision.get(path) == null) {
+ if (pathToJournalEntry.get(path) == null) {
Set<String> corruptPaths = pathToCorruptPaths.get(path);
- String corruptPath = checker.checkPathAtRevision(revision, corruptPaths, path, checkBinaries);
+ String corruptPath = checker.checkPathAtRevision(journalEntry.getRevision(), corruptPaths, path, checkBinaries);
if (corruptPath == null) {
checker.print("Path {0} is consistent", path);
- pathToValidRevision.put(path, revision);
+ pathToJournalEntry.put(path, journalEntry);
count++;
} else {
corruptPaths.add(corruptPath);
@@ -154,7 +157,7 @@ public class ConsistencyChecker implemen
}
}
} catch (IllegalArgumentException e) {
- checker.printError("Skipping invalid record id {0}", revision);
+ checker.printError("Skipping invalid record id {0}", journalEntry.getRevision());
}
}
@@ -164,9 +167,12 @@ public class ConsistencyChecker implemen
checker.print("No good revision found");
} else {
for (String path : filterPaths) {
- String validRevision = pathToValidRevision.get(path);
- checker.print("Latest good revision for path {0} is {1}", path,
- validRevision != null ? validRevision : "none");
+ JournalEntry journalEntry = pathToJournalEntry.get(path);
+ String revision = journalEntry != null ? journalEntry.getRevision() : null;
+ long timestamp = journalEntry != null ? journalEntry.getTimestamp() : -1L;
+
+ checker.print("Latest good revision for path {0} is {1} from {2}", path,
+ toString(revision), toString(timestamp));
}
}
@@ -188,6 +194,22 @@ public class ConsistencyChecker implemen
}
}
+ private static String toString(String revision) {
+ if (revision != null) {
+ return revision;
+ } else {
+ return "none";
+ }
+ }
+
+ private static String toString(long timestamp) {
+ if (timestamp != -1L) {
+ return getDateTimeInstance().format(new Date(timestamp));
+ } else {
+ return "unknown date";
+ }
+ }
+
/**
* Create a new consistency checker instance
*
@@ -394,6 +416,10 @@ public class ConsistencyChecker implemen
outWriter.println(MessageFormat.format(format, arg1, arg2));
}
+ private void print(String format, Object arg1, Object arg2, Object arg3) {
+ outWriter.println(MessageFormat.format(format, arg1, arg2, arg3));
+ }
+
private void printError(String format, Object arg) {
errWriter.println(MessageFormat.format(format, arg));
}