use of org.apache.cassandra.utils.AbstractIterator in project cassandra by apache.
the class HintsBuffer method consumingHintsIterator.
/**
* Coverts the queue of offsets for the selected host id into an iterator of hints encoded as ByteBuffers.
*/
Iterator<ByteBuffer> consumingHintsIterator(UUID hostId) {
final Queue<Integer> bufferOffsets = offsets.get(hostId);
if (bufferOffsets == null)
return Collections.emptyIterator();
return new AbstractIterator<ByteBuffer>() {
private final ByteBuffer flyweight = slab.duplicate();
protected ByteBuffer computeNext() {
Integer offset = bufferOffsets.poll();
if (offset == null)
return endOfData();
int totalSize = slab.getInt(offset) + ENTRY_OVERHEAD_SIZE;
return (ByteBuffer) flyweight.clear().position(offset).limit(offset + totalSize);
}
};
}
use of org.apache.cassandra.utils.AbstractIterator in project cassandra by apache.
the class Replay method replay.
public static void replay(String keyspace, List<String> arguments, List<String> targetHosts, List<File> resultPaths, String queryStorePath, boolean replayDDLStatements) {
// how many fql queries should we read in to memory to be able to sort them?
int readAhead = 200;
List<ChronicleQueue> readQueues = null;
List<FQLQueryIterator> iterators = null;
List<Predicate<FQLQuery>> filters = new ArrayList<>();
if (keyspace != null)
filters.add(fqlQuery -> fqlQuery.keyspace() == null || fqlQuery.keyspace().equals(keyspace));
if (!replayDDLStatements)
filters.add(fqlQuery -> {
boolean notDDLStatement = !fqlQuery.isDDLStatement();
if (!notDDLStatement)
logger.info("Excluding DDL statement from replaying: {}", ((FQLQuery.Single) fqlQuery).query);
return notDDLStatement;
});
try {
readQueues = arguments.stream().map(s -> SingleChronicleQueueBuilder.single(s).readOnly(true).build()).collect(Collectors.toList());
iterators = readQueues.stream().map(ChronicleQueue::createTailer).map(tailer -> new FQLQueryIterator(tailer, readAhead)).collect(Collectors.toList());
try (MergeIterator<FQLQuery, List<FQLQuery>> iter = MergeIterator.get(iterators, FQLQuery::compareTo, new Reducer());
QueryReplayer replayer = new QueryReplayer(iter, targetHosts, resultPaths, filters, queryStorePath)) {
replayer.replay();
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (iterators != null)
iterators.forEach(AbstractIterator::close);
if (readQueues != null)
readQueues.forEach(Closeable::close);
}
}
Aggregations