public MergedIterator(SerializedComparator comparator, Collection<TrackedReference<SortedOplogReader>> soplogs, List<SortedIterator<ByteBuffer>> iters) { this.comparator = comparator; this.soplogs = soplogs; this.iters = iters; // initialize iteration positions for (Iterator<SortedIterator<ByteBuffer>> merge = iters.iterator(); merge.hasNext(); ) { SortedIterator<ByteBuffer> si = merge.next(); if (si.hasNext()) { si.next(); } else { merge.remove(); } } }
try { for (int i = 17998; i >= 2000; i -= 2) { assertTrue(iter.hasNext()); iter.next(); assertEquals(i, iter.key().getInt()); assertEquals(i, iter.value().getInt()); iter.close(); try { for (int i = 17996; i >= 2002; i -= 2) { assertTrue(iter.hasNext()); iter.next(); assertEquals(i, iter.key().getInt()); assertEquals(i, iter.value().getInt()); iter.close();
try { for (int i = entries - 1; i >= 0; i--) { assertTrue(iter.hasNext()); iter.next(); assertEquals(i, iter.key().getInt()); assertEquals(i, iter.value().getInt()); iter.close(); try { for (int i = 4000; i >= 1000; i--) { assertTrue(iter.hasNext()); iter.next(); assertEquals(i, iter.key().getInt()); assertEquals(i, iter.value().getInt()); iter.close();
public void testInUse() throws Exception { FlushCounter handler = new FlushCounter(); SortedOplogSet sos = createSoplogSet("inuse"); for (int i = 0; i < 1000; i++) { sos.put(wrapInt(i), wrapInt(i)); } flushAndWait(handler, sos); // start iterating over soplog SortedIterator<ByteBuffer> range = sos.scan(); assertEquals(0, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders()); for (int i = 1000; i < 5000; i++) { sos.put(wrapInt(i), wrapInt(i)); if (i % 100 == 0) { sos.flush(null, handler); } } flushAndWait(handler, sos); compactAndWait(sos, false); assertEquals(1, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders()); range.close(); compactAndWait(sos, false); assertEquals(0, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders()); validate(sos, 5000); sos.close(); }
public void testHead() throws IOException { byte[] split = wrapInt(50); SortedIterator<ByteBuffer> scan = reader.head(split, true); try { Iterator<Entry<byte[], byte[]>> iter = data.headMap(split, true).entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } scan = reader.head(split, false); try { Iterator<Entry<byte[], byte[]>> iter = data.headMap(split, false).entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } }
public void testTail() throws IOException { byte[] split = wrapInt(50); SortedIterator<ByteBuffer> scan = reader.tail(split, true); try { Iterator<Entry<byte[], byte[]>> iter = data.tailMap(split, true).entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } scan = reader.tail(split, false); try { Iterator<Entry<byte[], byte[]>> iter = data.tailMap(split, false).entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } }
public void testScanAfterClear() throws IOException { SortedIterator<ByteBuffer> iter = set.scan(); set.clear(); assertFalse(iter.hasNext()); }
public void testScanEquality() throws IOException { byte[] val = wrapInt(10); // [val,val] SortedIterator<ByteBuffer> scan = reader.scan(val); try { Iterator<Entry<byte[], byte[]>> iter = data.subMap(val, true, val, true).entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } }
public void testScanReverse() throws IOException { SortedIterator<ByteBuffer> scan = reader.withAscending(false).scan(); try { Iterator<Entry<byte[], byte[]>> iter = data.descendingMap().entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } }
@Override public void close() { for (SortedIterator<ByteBuffer> iter : iters) { iter.close(); } // TODO release the reference as soon as the iterator is finished TrackedReference.decrementAll(soplogs); }
public void testScanAfterClose() throws IOException { SortedIterator<ByteBuffer> iter = set.scan(); set.close(); assertFalse(iter.hasNext()); }
public void testScan() throws IOException { SortedIterator<ByteBuffer> scan = reader.scan(); try { Iterator<Entry<byte[], byte[]>> iter = data.entrySet().iterator(); doIter(scan, iter); } finally { scan.close(); } }