@Override
public SortedIterator<ByteBuffer> scan(
byte[] from, boolean fromInclusive,
byte[] to, boolean toInclusive,
boolean ascending,
MetadataFilter filter) throws IOException {
SerializedComparator sc = factory.getConfiguration().getComparator();
sc = ascending ? sc : ReversingSerializedComparator.reverse(sc);
List<SortedIterator<ByteBuffer>> scans = new ArrayList<SortedIterator<ByteBuffer>>();
Collection<TrackedReference<SortedOplogReader>> soplogs;
rwlock.readLock().lock();
try {
scans.add(getCurrent().scan(from, fromInclusive, to, toInclusive, ascending, filter));
for (SortedBuffer<Integer> sb : unflushed) {
scans.add(sb.scan(from, fromInclusive, to, toInclusive, ascending, filter));
}
soplogs = compactor.getActiveReaders(from, to);
} finally {
rwlock.readLock().unlock();
}
for (TrackedReference<SortedOplogReader> tr : soplogs) {
scans.add(tr.get().scan(from, fromInclusive, to, toInclusive, ascending, filter));
}
return new MergedIterator(sc, soplogs, scans);
}