Hi I'm sorry - don't want to be a pain in the neck with source questions. So please just ignore me if this is stupid:
Isn't org.apache.cassandra.service.ReadResponseResolver suposed to throw a DigestMismatchException if it receives a digest wich does not match the digest of a read message? If messages contains multiple digest responses it will drop all but one. So if any of the dropped digest are a mismatch to the version that mismatch is simply ignored. It can cope with multiple reads (versions) but not with multiple digests and that's what it gets from quorum reads. It might be an edge case, but I think that would break quorum promise with rf > 3 because you could have 1 broken data message, 1 broken digest message and 2 good digest messages. If the 2 good messages were dropped than the quorum read that should have triggered repair and conflict resolution would return old data. I just can't see what I'm not seeing here. Cheers, Daniel