diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java index e837754..5f957f3 100644 --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java @@ -69,7 +69,8 @@ import java.util.UUID; */ public class CompactionMap { - private final int compressInterval; + private static final int COMPRESS_INTERVAL = Integer.getInteger("compress-interval", 100000); + private final SegmentTracker tracker; private Map recent = newHashMap(); @@ -87,8 +88,7 @@ public class CompactionMap { private CompactionMap prev; - CompactionMap(int compressInterval, SegmentTracker tracker) { - this.compressInterval = compressInterval; + CompactionMap(SegmentTracker tracker) { this.tracker = tracker; } @@ -219,7 +219,7 @@ public class CompactionMap { throw new IllegalArgumentException(); } recent.put(before, after); - if (recent.size() >= compressInterval) { + if (recent.size() >= COMPRESS_INTERVAL) { compress(); } } diff --git 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 index 81dc30e..375d435 100644 --- 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 @@ -83,7 +83,7 @@ public class Compactor { 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; } diff --git oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java index 243f796..b50f66a 100644 --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java @@ -102,7 +102,7 @@ public class SegmentTracker { this.writer = new SegmentWriter(store, this, version); this.cacheSize = cacheSizeMB * MB; this.compactionMap = new AtomicReference( - new CompactionMap(1, this)); + new CompactionMap(this)); } public SegmentTracker(SegmentStore store, SegmentVersion version) { diff --git oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java index bc05993..517c3fd 100644 --- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java +++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java @@ -40,7 +40,7 @@ public class CompactionMapTest { System.out.println((runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024)); SegmentTracker factory = new MemoryStore().getTracker(); - CompactionMap map = new CompactionMap(100000, factory); + CompactionMap map = new CompactionMap(factory); for (int i = 0; i < 1000000; i++) { if (i % 1000 == 0) { System.gc(); @@ -59,13 +59,13 @@ public class CompactionMapTest { @Test public void testCompactionMap() { - int maxSegments = 1000; + int maxSegments = 100000; int maxEntriesPerSegment = 10; int seed = new Random().nextInt(); Random r = new Random(seed); SegmentTracker factory = new MemoryStore().getTracker(); - CompactionMap map = new CompactionMap(r.nextInt(maxSegments / 2), factory); + CompactionMap map = new CompactionMap(factory); Map entries = newHashMap(); int segments = r.nextInt(maxSegments);