@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(); } }
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()); }
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); }
/** * Obtains the current set of active soplogs for this level. * @return the soplog snapshot */ protected List<TrackedReference<SortedOplogReader>> getSnapshot() { return getSnapshot(null, null); }