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