@Override public final Collection<TrackedReference<SortedOplogReader>> getActiveReaders( byte[] start, byte[] end) { // need to coordinate with clear() so we can get a consistent snapshot // across levels levelLock.readLock().lock(); try { // TODO this seems very garbage-y List<TrackedReference<SortedOplogReader>> soplogs = new ArrayList<TrackedReference<SortedOplogReader>>(); for (Level level : levels) { soplogs.addAll(level.getSnapshot(start, end)); } return soplogs; } finally { levelLock.readLock().unlock(); } }
levels.get(Math.min(level + 1, maxLevels - 1)).add(merged);
@Override public final void clear() throws IOException { if (logger.fineEnabled()) { logger.fine("Clearing compactor"); } compactor.abortAll(); releaseTestDelay(); compactor.waitForCompletion(); levelLock.writeLock().lock(); try { for (Level l : levels) { l.clear(); } } finally { levelLock.writeLock().unlock(); } cleanupInactive(); }
if (force || level.needsCompaction()) { if (logger.fineEnabled()) { logger.fine("Compacting level " + level); compacted |= level.compact(aborted); factory.getConfiguration().getStatistics().getMinorCompaction().end(start);
@Override public final void close() throws IOException { if (logger.fineEnabled()) { logger.fine("Closing compactor"); } compactor.abortAll(); releaseTestDelay(); compactor.waitForCompletion(); levelLock.writeLock().lock(); try { for (Level l : levels) { l.close(); } } finally { levelLock.writeLock().unlock(); } TrackedReference<SortedOplogReader> tr; while ((tr = inactive.poll()) != null) { deleteInactive(tr); } inactive.clear(); }
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)); } } }
public void testCompactionLevel0() throws Exception { compactor.add(createSoplog(0, 100, 0)); compactor.add(createSoplog(100, 100, 1)); assertEquals(2, compactor.getActiveReaders(null, null).size()); assertEquals(2, compactor.getLevel(0).getSnapshot().size()); assertTrue(compactor.getLevel(0).needsCompaction()); WaitingHandler wh = new WaitingHandler(); compactor.compact(false, wh); wh.waitForCompletion(); assertEquals(1, compactor.getActiveReaders(null, null).size()); assertEquals(0, compactor.getLevel(0).getSnapshot().size()); assertEquals(1, compactor.getLevel(1).getSnapshot().size()); assertFalse(compactor.getLevel(0).needsCompaction()); assertFalse(compactor.getLevel(1).needsCompaction()); validate(compactor.getActiveReaders(null, null).iterator().next().get(), 0, 200); }
public void testInterruptedCompaction() throws IOException { compactor.add(createSoplog(0, 100, 0)); compactor.add(createSoplog(100, 100, 1)); compactor.testAbortDuringCompaction = true; boolean compacted = compactor.compact(); assertFalse(compacted); assertEquals(2, compactor.getActiveReaders(null, null).size()); assertTrue(compactor.getLevel(0).needsCompaction()); }
/** * Obtains the current set of active soplogs for this level. * @return the soplog snapshot */ protected List<TrackedReference<SortedOplogReader>> getSnapshot() { return getSnapshot(null, null); }
public void testBasic() throws Exception { compactor.add(createSoplog(0, 100, 0)); assertEquals(1, compactor.getActiveReaders(null, null).size()); assertEquals(1, compactor.getLevel(0).getSnapshot().size()); assertFalse(compactor.getLevel(0).needsCompaction()); WaitingHandler wh = new WaitingHandler(); compactor.compact(false, wh); wh.waitForCompletion(); assertEquals(1, compactor.getActiveReaders(null, null).size()); assertEquals(1, compactor.getLevel(0).getSnapshot().size()); assertFalse(compactor.getLevel(0).needsCompaction()); }
@Override public final void add(SortedOplog soplog) throws IOException { levels.get(0).add(soplog); }
public void testClear() throws IOException { compactor.add(createSoplog(0, 100, 0)); compactor.add(createSoplog(100, 100, 1)); compactor.clear(); assertEquals(0, compactor.getActiveReaders(null, null).size()); assertFalse(compactor.getLevel(0).needsCompaction()); }