Author: jbellis Date: Tue Jul 27 03:54:22 2010 New Revision: 979514 URL: http://svn.apache.org/viewvc?rev=979514&view=rev Log: merge from 0.6
Modified: cassandra/trunk/ (props changed) cassandra/trunk/CHANGES.txt cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java (props changed) cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java (props changed) cassandra/trunk/src/java/org/apache/cassandra/service/ReadResponseResolver.java cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Propchange: cassandra/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6:922689-979500 +/cassandra/branches/cassandra-0.6:922689-979511 /cassandra/trunk:978791 /incubator/cassandra/branches/cassandra-0.3:774578-796573 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350 Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=979514&r1=979513&r2=979514&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Tue Jul 27 03:54:22 2010 @@ -69,7 +69,7 @@ dev 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) - + * process digest mismatch re-reads in parallel (CASSANDRA-1323) 0.6.3 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-979500 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-979511 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:978791 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-979500 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-979511 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:978791 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-979500 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-979511 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:978791 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-979500 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-979511 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:978791 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350 Propchange: cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Tue Jul 27 03:54:22 2010 @@ -1,4 +1,4 @@ -/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-979500 +/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-979511 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:978791 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350 Modified: cassandra/trunk/src/java/org/apache/cassandra/service/ReadResponseResolver.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/ReadResponseResolver.java?rev=979514&r1=979513&r2=979514&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/ReadResponseResolver.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/ReadResponseResolver.java Tue Jul 27 03:54:22 2010 @@ -60,8 +60,8 @@ public class ReadResponseResolver implem public Row resolve(Collection<Message> responses) throws DigestMismatchException, IOException { long startTime = System.currentTimeMillis(); - List<ColumnFamily> versions = new ArrayList<ColumnFamily>(); - List<InetAddress> endpoints = new ArrayList<InetAddress>(); + List<ColumnFamily> versions = new ArrayList<ColumnFamily>(responses.size()); + List<InetAddress> endpoints = new ArrayList<InetAddress>(responses.size()); DecoratedKey key = null; byte[] digest = new byte[0]; boolean isDigestQuery = false; Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=979514&r1=979513&r2=979514&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Tue Jul 27 03:54:22 2010 @@ -395,8 +395,7 @@ public class StorageProxy implements Sto List<InetAddress[]> commandEndpoints = new ArrayList<InetAddress[]>(); List<Row> rows = new ArrayList<Row>(); - int commandIndex = 0; - + // send out read requests for (ReadCommand command: commands) { assert !command.isDigestQuery(); @@ -428,10 +427,13 @@ public class StorageProxy implements Sto commandEndpoints.add(endpoints); } - for (QuorumResponseHandler<Row> quorumResponseHandler: quorumResponseHandlers) + // read results and make a second pass for any digest mismatches + List<QuorumResponseHandler<Row>> repairResponseHandlers = null; + for (int i = 0; i < commands.size(); i++) { + QuorumResponseHandler<Row> quorumResponseHandler = quorumResponseHandlers.get(i); Row row; - ReadCommand command = commands.get(commandIndex); + ReadCommand command = commands.get(i); try { long startTime2 = System.currentTimeMillis(); @@ -447,24 +449,34 @@ public class StorageProxy implements Sto if (randomlyReadRepair(command)) { AbstractReplicationStrategy rs = StorageService.instance.getReplicationStrategy(command.table); - QuorumResponseHandler<Row> quorumResponseHandlerRepair = rs.getQuorumResponseHandler(new ReadResponseResolver(command.table), ConsistencyLevel.QUORUM, command.table); + QuorumResponseHandler<Row> qrhRepair = rs.getQuorumResponseHandler(new ReadResponseResolver(command.table), ConsistencyLevel.QUORUM, command.table); if (logger.isDebugEnabled()) logger.debug("Digest mismatch:", ex); Message messageRepair = command.makeReadMessage(); - MessagingService.instance.sendRR(messageRepair, commandEndpoints.get(commandIndex), quorumResponseHandlerRepair); - try - { - row = quorumResponseHandlerRepair.get(); - if (row != null) - rows.add(row); - } - catch (DigestMismatchException e) - { - throw new AssertionError(e); // full data requested from each node here, no digests should be sent - } + MessagingService.instance.sendRR(messageRepair, commandEndpoints.get(i), qrhRepair); + if (repairResponseHandlers == null) + repairResponseHandlers = new ArrayList<QuorumResponseHandler<Row>>(); + repairResponseHandlers.add(qrhRepair); + } + } + } + + // read the results for the digest mismatch retries + if (repairResponseHandlers != null) + { + for (QuorumResponseHandler<Row> handler : repairResponseHandlers) + { + try + { + Row row = handler.get(); + if (row != null) + rows.add(row); + } + catch (DigestMismatchException e) + { + throw new AssertionError(e); // full data requested from each node here, no digests should be sent } } - commandIndex++; } return rows;