Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (revision 1701579) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (working copy) @@ -83,7 +83,7 @@ public Compactor(SegmentWriter writer, boolean cloneBinaries) { this.writer = writer; - this.map = new CompactionMap(100000, writer.getTracker()); + this.map = new CompactionMap(writer.getTracker()); this.cloneBinaries = cloneBinaries; } @@ -95,8 +95,10 @@ } public SegmentNodeState compact(NodeState before, NodeState after) { + progressStart(); SegmentNodeState compacted = process(before, after).getNodeState(); writer.flush(); + progressDone(); return compacted; } @@ -105,6 +107,37 @@ return map; } + // progress reports + + private long progress = 0; + + private int logAt = Integer.getInteger("compaction-progress-log", 15000); + + private long start = 0; + + private void progressStart() { + progress = 0; + start = System.currentTimeMillis(); + } + + private void progressNewNode() { + if (++progress % logAt == 0) { + logProgress(start); + start = System.currentTimeMillis(); + } + } + + private void progressDone() { + logProgress(start); + } + + private void logProgress(long start) { + log.warn("Compacted {} nodes in {} ms.", progress, + System.currentTimeMillis() - start); + } + + // ---- + private class CompactDiff extends ApplyDiff { /** @@ -130,6 +163,7 @@ } else { this.path = null; } + progressNewNode(); } @Override