use of org.apache.cassandra.service.reads.repair.RepairedDataTracker in project cassandra by apache.
the class DataResolver method resolve.
public PartitionIterator resolve() {
// We could get more responses while this method runs, which is ok (we're happy to ignore any response not here
// at the beginning of this method), so grab the response count once and use that through the method.
Collection<Message<ReadResponse>> messages = responses.snapshot();
assert !any(messages, msg -> msg.payload.isDigestResponse());
E replicas = replicaPlan().candidates().select(transform(messages, Message::from), false);
// If requested, inspect each response for a digest of the replica's repaired data set
RepairedDataTracker repairedDataTracker = trackRepairedStatus ? new RepairedDataTracker(getRepairedDataVerifier(command)) : null;
if (repairedDataTracker != null) {
messages.forEach(msg -> {
if (msg.payload.mayIncludeRepairedDigest() && replicas.byEndpoint().get(msg.from()).isFull()) {
repairedDataTracker.recordDigest(msg.from(), msg.payload.repairedDataDigest(), msg.payload.isRepairedDigestConclusive());
}
});
}
if (!needsReplicaFilteringProtection()) {
ResolveContext context = new ResolveContext(replicas);
return resolveWithReadRepair(context, i -> shortReadProtectedResponse(i, context), UnaryOperator.identity(), repairedDataTracker);
}
return resolveWithReplicaFilteringProtection(replicas, repairedDataTracker);
}
Aggregations