Author: brandonwilliams Date: Mon Jul 26 22:10:10 2010 New Revision: 979465
URL: http://svn.apache.org/viewvc?rev=979465&view=rev Log: fix read repair to use requested consistency level on digest mismatch, rather than assuming QUORUM. Patch by brandonwilliams and jbellis, reviewed by brandonwilliams for CASSANDRA-1316. Modified: cassandra/branches/cassandra-0.6/CHANGES.txt cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java Modified: cassandra/branches/cassandra-0.6/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=979465&r1=979464&r2=979465&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.6/CHANGES.txt Mon Jul 26 22:10:10 2010 @@ -22,6 +22,9 @@ * remove gossip message size limit (CASSANDRA-1138) * parallelize local and remote reads during multiget, and respect snitch when determining whether to do local read for CL.ONE (CASSANDRA-1317) + * fix read repair to use requested consistency level on digest mismatch, + rather than assuming QUORUM (CASSANDRA-1316) + 0.6.3 Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java?rev=979465&r1=979464&r2=979465&view=diff ============================================================================== --- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java (original) +++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java Mon Jul 26 22:10:10 2010 @@ -475,7 +475,7 @@ public class StorageProxy implements Sto if (logger.isDebugEnabled()) logger.debug("strongread reading " + (m == message ? "data" : "digest") + " for " + command + " from " + m.getMessageId() + "@" + endpoint); } - QuorumResponseHandler<Row> quorumResponseHandler = new QuorumResponseHandler<Row>(DatabaseDescriptor.getQuorum(command.table), new ReadResponseResolver(command.table, responseCount)); + QuorumResponseHandler<Row> quorumResponseHandler = new QuorumResponseHandler<Row>(responseCount, new ReadResponseResolver(command.table, responseCount)); MessagingService.instance.sendRR(messages, endPoints, quorumResponseHandler); quorumResponseHandlers.add(quorumResponseHandler); commandEndPoints.add(endPoints); @@ -499,10 +499,9 @@ public class StorageProxy implements Sto { if (DatabaseDescriptor.getConsistencyCheck()) { - IResponseResolver<Row> readResponseResolverRepair = new ReadResponseResolver(command.table, DatabaseDescriptor.getQuorum(command.table)); - QuorumResponseHandler<Row> quorumResponseHandlerRepair = new QuorumResponseHandler<Row>( - DatabaseDescriptor.getQuorum(command.table), - readResponseResolverRepair); + int responseCount = determineBlockFor(DatabaseDescriptor.getReplicationFactor(command.table), consistency_level); + IResponseResolver<Row> readResponseResolverRepair = new ReadResponseResolver(command.table, responseCount); + QuorumResponseHandler<Row> quorumResponseHandlerRepair = new QuorumResponseHandler<Row>(responseCount, readResponseResolverRepair); logger.info("DigestMismatchException: " + ex.getMessage()); Message messageRepair = command.makeReadMessage(); MessagingService.instance.sendRR(messageRepair, commandEndPoints.get(commandIndex), quorumResponseHandlerRepair);
