Index: jackrabbit-oak/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- jackrabbit-oak/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java (revision f454d227ad7418b1c7f911c67e5aead2208fdb5e) +++ jackrabbit-oak/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CheckCommand.java (date 1571407085000) @@ -45,6 +45,10 @@ .withRequiredArg() .ofType(Long.class) .defaultsTo(Long.MAX_VALUE); + OptionSpec maxRevisionsToCheck = parser.accepts("maxRevisionsToCheck", "define the number of revisions to be checked") + .withRequiredArg() + .ofType(Integer.class) + .defaultsTo(1); OptionSpec bin = parser.accepts("bin", "read the content of binary properties"); OptionSpec filter = parser.accepts("filter", "comma separated content paths to be checked") .withRequiredArg() @@ -78,6 +82,7 @@ .withCheckBinaries(options.has(bin)) .withCheckHead(shouldCheckHead(options, head, cp)) .withCheckpoints(toCheckpointsSet(options, head, cp)) + .withMaxRevisionsToCheck(maxRevisionsToCheck.value(options)) .withFilterPaths(toSet(options, filter)) .withIOStatistics(options.has(ioStatistics)) .withOutWriter(new PrintWriter(System.out, true)) Index: jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (revision f454d227ad7418b1c7f911c67e5aead2208fdb5e) +++ jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (date 1571408072000) @@ -345,7 +345,8 @@ boolean head, Set checkpoints, Set paths, - boolean binaries + boolean binaries, + int maxRevisionsToCheck ) { List headPaths = new ArrayList<>(); Map> checkpointPaths = new HashMap<>(); @@ -398,6 +399,11 @@ if (allPathsConsistent(headPaths, checkpointPaths)) { break; } + + //limit the number of revisions to be checked + if(maxRevisionsToCheck == revisionCount){ + break; + } } catch (IllegalArgumentException | SegmentNotFoundException e) { onCheckRevisionError(revision, e); } Index: jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java (revision f454d227ad7418b1c7f911c67e5aead2208fdb5e) +++ jackrabbit-oak/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Check.java (date 1571404100000) @@ -78,6 +78,8 @@ private boolean checkHead; + private int maxRevisionsToCheck; + private Set checkpoints; private Set filterPaths; @@ -169,6 +171,18 @@ this.checkHead = checkHead; return this; } + + /** + * Instruct the command to check only the last {@code maxRevisionsToCheck} + * This parameter is not required and defaults to {@code 1}. + * @param maxRevisionsToCheck if {@code 1} will check only the last revision. if 2 wil check up to 2 revisions. if the first revision is + * consistent will skip the second revision. + * @return this builder. + */ + public Builder withMaxRevisionsToCheck(Integer maxRevisionsToCheck){ + this.maxRevisionsToCheck = maxRevisionsToCheck; + return this; + } /** * Instruct the command to check specified checkpoints. @@ -298,6 +312,8 @@ private final boolean checkHead; + private final int maxRevisionsToCheck; + private final Set requestedCheckpoints; private final Set filterPaths; @@ -333,6 +349,7 @@ this.out = builder.outWriter; this.err = builder.errWriter; this.journal = journalPath(builder.path, builder.journal); + this.maxRevisionsToCheck = builder.maxRevisionsToCheck; } private static File journalPath(File segmentStore, File journal) { @@ -390,7 +407,8 @@ checkHead, checkpoints, filterPaths, - checkBinaries + checkBinaries, + maxRevisionsToCheck ); print("\nSearched through {0} revisions and {1} checkpoints", result.getCheckedRevisionsCount(), checkpoints.size());