You're right, the simplest fix here is to just always do the re-read
in the strong path.  Done in r998720.

(IMO the "right" thing is more complicated -- we shouldn't send
requests to _all_ the replicas on the _first_ read with CL.QUORUM,
except as dictated by randomlyReadRepair.)

On Sat, Sep 18, 2010 at 9:39 AM, Zhu Han <schumi....@gmail.com> wrote:
> Hi,
>
> I notice below code snippet in StorageProxy#strongRead(). Why the read
> repair is still trigged randomly if digest  is mis-matched  for CL.Quorum
> and CL.ALL. IMHO, the client wants the result to be returned is the
> consistent one on those two CL.  Read repair should be triggered
> definitively here.
>
> If the client does not care about consistency, CL.ONE is the definitive
> choice. For this level, read repair can be trigged randomly per the
> configuration of key space.
>
>            try
>>             {
>>                 long startTime2 = System.currentTimeMillis();
>>                 row = quorumResponseHandler.get();
>>                 if (row != null)
>>                     rows.add(row);
>>
>>                 if (logger.isDebugEnabled())
>>                     logger.debug("quorumResponseHandler: " + (System.
>> currentTimeMillis() - startTime2) + " ms.");
>>             }
>>             catch (DigestMismatchException ex)
>>             {
>>                 if (randomlyReadRepair(command))
>>                 {
>>                     AbstractReplicationStrategy rs = StorageService.
>> instance.getReplicationStrategy(command.table);
>>                     QuorumResponseHandler<Row> qrhRepair = rs.
>> getQuorumResponseHandler(new ReadResponseResolver(command.table),
>> ConsistencyLevel.QUORUM);
>>                     if (logger.isDebugEnabled())
>>                         logger.debug("Digest mismatch:", ex);
>>                     Message messageRepair = command.makeReadMessage();
>>                     MessagingService.instance.sendRR(messageRepair,
>> commandEndpoints.get(i), qrhRepair);
>>                     if (repairResponseHandlers == null)
>>                         repairResponseHandlers = new ArrayList<
>> QuorumResponseHandler<Row>>();
>>                     repairResponseHandlers.add(qrhRepair);
>>                 }
>>
>
>
>
>
> best regards,
> hanzhu
>



-- 
Jonathan Ellis
Project Chair, Apache Cassandra
co-founder of Riptano, the source for professional Cassandra support
http://riptano.com

Reply via email to