public SizeTieredCompactor(SortedOplogFactory factory,
Fileset<Integer> fileset, CompactionTracker<Integer> tracker,
Executor exec, int maxFilesPerLevel, int maxLevels)
throws IOException {
super(factory, fileset, tracker, exec);
assert maxFilesPerLevel > 0;
assert maxLevels > 0;
this.maxFilesPerLevel = maxFilesPerLevel;
this.maxLevels = maxLevels;
if (logger.fineEnabled()) {
logger.fine("Creating size-tiered compactor");
}
for (int i = 0; i < maxLevels; i++) {
levels.add(new OrderedLevel(i));
}
for (Map.Entry<Integer, ? extends Iterable<File>> entry : fileset.recover().entrySet()) {
int level = Math.min(maxLevels - 1, entry.getKey());
for (File f : entry.getValue()) {
if (logger.fineEnabled()) {
logger.fine("Adding " + f + " to level " + level);
}
levels.get(level).add(factory.createSortedOplog(f));
}
}
}