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 2019/06/28 09:55:33 UTC
svn commit: r1862275 - in
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment:
file/tooling/ConsistencyChecker.java tool/Check.java
Author: adulceanu
Date: Fri Jun 28 09:55:33 2019
New Revision: 1862275
URL: http://svn.apache.org/viewvc?rev=1862275&view=rev
Log:
OAK-8429 - oak-run check should expose repository statistics for the last good revision
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.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=1862275&r1=1862274&r2=1862275&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 Fri Jun 28 09:55:33 2019
@@ -103,11 +103,11 @@ public class ConsistencyChecker {
// Do nothing.
}
- protected void onCheckTree(String path) {
+ protected void onCheckTree(String path, boolean head) {
// Do nothing.
}
- protected void onCheckTreeEnd() {
+ protected void onCheckTreeEnd(boolean head) {
// Do nothing.
}
@@ -215,25 +215,25 @@ public class ConsistencyChecker {
return checkNodeAndDescendants(node, path, binaries);
}
- private String checkTreeConsistency(NodeState root, String path, Set<String> corruptedPaths, boolean binaries) {
+ private String checkTreeConsistency(NodeState root, String path, Set<String> corruptedPaths, boolean binaries, boolean head) {
String corruptedPath = findFirstCorruptedPathInSet(root, corruptedPaths, binaries);
if (corruptedPath != null) {
return corruptedPath;
}
- onCheckTree(path);
+ onCheckTree(path, head);
corruptedPath = findFirstCorruptedPathInTree(root, path, binaries);
- onCheckTreeEnd();
+ onCheckTreeEnd(head);
return corruptedPath;
}
- private boolean checkPathConsistency(NodeState root, PathToCheck ptc, JournalEntry entry, boolean binaries) {
+ private boolean checkPathConsistency(NodeState root, PathToCheck ptc, JournalEntry entry, boolean binaries, boolean head) {
if (ptc.journalEntry != null) {
return true;
}
- String corruptPath = checkTreeConsistency(root, ptc.path, ptc.corruptPaths, binaries);
+ String corruptPath = checkTreeConsistency(root, ptc.path, ptc.corruptPaths, binaries, head);
if (corruptPath != null) {
ptc.corruptPaths.add(corruptPath);
@@ -245,11 +245,11 @@ public class ConsistencyChecker {
return true;
}
- private boolean checkAllPathsConsistency(NodeState root, List<PathToCheck> paths, JournalEntry entry, boolean binaries) {
+ private boolean checkAllPathsConsistency(NodeState root, List<PathToCheck> paths, JournalEntry entry, boolean binaries, boolean head) {
boolean result = true;
for (PathToCheck ptc : paths) {
- if (!checkPathConsistency(root, ptc, entry, binaries)) {
+ if (!checkPathConsistency(root, ptc, entry, binaries, head)) {
result = false;
}
}
@@ -265,7 +265,7 @@ public class ConsistencyChecker {
}
onCheckHead();
- return checkAllPathsConsistency(store.getRoot(), paths, entry, binaries);
+ return checkAllPathsConsistency(store.getRoot(), paths, entry, binaries, true);
}
private boolean checkCheckpointConsistency(SegmentNodeStore store, String checkpoint, List<PathToCheck> paths, JournalEntry entry, boolean binaries) {
@@ -284,7 +284,7 @@ public class ConsistencyChecker {
return false;
}
- return checkAllPathsConsistency(root, paths, entry, binaries);
+ return checkAllPathsConsistency(root, paths, entry, binaries, false);
}
private boolean checkCheckpointsConsistency(SegmentNodeStore store, Map<String, List<PathToCheck>> paths, JournalEntry entry, boolean binaries) {
@@ -336,7 +336,7 @@ public class ConsistencyChecker {
* during a full traversal of the tree.
*/
public String checkTreeConsistency(NodeState root, Set<String> corruptedPaths, boolean binaries) {
- return checkTreeConsistency(root, "/", corruptedPaths, binaries);
+ return checkTreeConsistency(root, "/", corruptedPaths, binaries, true);
}
public final ConsistencyCheckResult checkConsistency(
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java?rev=1862275&r1=1862274&r2=1862275&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java Fri Jun 28 09:55:33 2019
@@ -84,6 +84,8 @@ public class Check {
private boolean ioStatistics;
+ private RepositoryStatistics repoStatistics;
+
private PrintWriter outWriter;
private PrintWriter errWriter;
@@ -209,6 +211,18 @@ public class Check {
}
/**
+ * Attach a repository statistics instance to collect info on nodes
+ * and properties checked on head.
+ *
+ * @param repoStatistics instance to collect statistics
+ * @return this builder.
+ */
+ public Builder withRepositoryStatistics(RepositoryStatistics repoStatistics) {
+ this.repoStatistics = repoStatistics;
+ return this;
+ }
+
+ /**
* The text output stream writer used to print normal output.
* @param outWriter the output writer.
* @return this builder.
@@ -259,6 +273,19 @@ public class Check {
}
+ public static class RepositoryStatistics {
+ int headNodeCount;
+ int headPropertyCount;
+
+ public int getHeadNodeCount() {
+ return headNodeCount;
+ }
+
+ public int getHeadPropertyCount() {
+ return headPropertyCount;
+ }
+ }
+
private final File path;
private final boolean mmap;
@@ -277,13 +304,19 @@ public class Check {
private final boolean ioStatistics;
+ private RepositoryStatistics repoStatistics;
+
private final PrintWriter out;
private final PrintWriter err;
- private int nodeCount;
+ private int currentNodeCount;
+
+ private int currentPropertyCount;
- private int propertyCount;
+ private int headNodeCount;
+
+ private int headPropertyCount;
private long lastDebugEvent;
@@ -296,6 +329,7 @@ public class Check {
this.requestedCheckpoints = builder.checkpoints;
this.filterPaths = builder.filterPaths;
this.ioStatistics = builder.ioStatistics;
+ this.repoStatistics = builder.repoStatistics;
this.out = builder.outWriter;
this.err = builder.errWriter;
this.journal = journalPath(builder.path, builder.journal);
@@ -331,6 +365,11 @@ public class Check {
print("[I/O] Segment read: Total time: {0} ns", ioMonitor.time.get());
}
+ if (repoStatistics != null) {
+ repoStatistics.headNodeCount = headNodeCount;
+ repoStatistics.headPropertyCount = headPropertyCount;
+ }
+
return 0;
} catch (Exception e) {
e.printStackTrace(err);
@@ -390,6 +429,8 @@ public class Check {
@Override
protected void onCheckHead() {
+ headNodeCount = 0;
+ headPropertyCount = 0;
print("\nChecking head\n");
}
@@ -424,26 +465,31 @@ public class Check {
}
@Override
- protected void onCheckTree(String path) {
- nodeCount = 0;
- propertyCount = 0;
+ protected void onCheckTree(String path, boolean head) {
+ currentNodeCount = 0;
+ currentPropertyCount = 0;
print("Checking {0}", path);
}
@Override
- protected void onCheckTreeEnd() {
- print("Checked {0} nodes and {1} properties", nodeCount, propertyCount);
+ protected void onCheckTreeEnd(boolean head) {
+ if (head) {
+ headNodeCount += currentNodeCount;
+ headPropertyCount += currentPropertyCount;
+ }
+
+ print("Checked {0} nodes and {1} properties", currentNodeCount, currentPropertyCount);
}
@Override
protected void onCheckNode(String path) {
debug("Traversing {0}", path);
- nodeCount++;
+ currentNodeCount++;
}
@Override
protected void onCheckProperty() {
- propertyCount++;
+ currentPropertyCount++;
}
@Override