[ 
https://issues.apache.org/jira/browse/CASSANDRA-937?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jonathan Ellis updated CASSANDRA-937:
-------------------------------------

    Attachment: 937-2.txt

Repair is always invoked by a node that has a copy of the data, or thinks it 
should (that is how it gets the "initial row" to compare digests against), but 
if the definition of who should have replicas changes either from bootstrap or 
during rebuilding of the ring after a cluster restart then local node could be 
an "extra" replica at repair time.

This patch changes repair to keep the replica set constant throughout the 
process.  It also fixes repair to start comparing digests immediately rather 
than waiting for all responses first for no reason, and avoids an extra read 
from the local replica, re-using the one that we've been comparing digests with.

> Invalid Response count 4
> ------------------------
>
>                 Key: CASSANDRA-937
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-937
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: replication factor is set to 3
>            Reporter: Dan Di Spaltro
>             Fix For: 0.6.1
>
>         Attachments: 937-2.txt
>
>
> 2010-03-30_21:59:04.64973 ERROR - Error in ThreadPoolExecutor
> 2010-03-30_21:59:04.64973 java.lang.AssertionError: invalid response count 4
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ReadResponseResolver.<init>(ReadResponseResolver.java:54)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.doReadRepair(ConsistencyManager.java:89)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.handleDigestResponses(ConsistencyManager.java:75)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.response(ConsistencyManager.java:60)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:35)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:40)
> 2010-03-30_21:59:04.64973     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 2010-03-30_21:59:04.64973     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 2010-03-30_21:59:04.64973     at java.lang.Thread.run(Thread.java:636)
> 2010-03-30_21:59:04.64973 ERROR - Fatal exception in thread 
> Thread[RESPONSE-STAGE:5,5,main]
> 2010-03-30_21:59:04.64973 java.lang.AssertionError: invalid response count 4
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ReadResponseResolver.<init>(ReadResponseResolver.java:54)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.doReadRepair(ConsistencyManager.java:89)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.handleDigestResponses(ConsistencyManager.java:75)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.service.ConsistencyManager$DigestResponseHandler.response(ConsistencyManager.java:60)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.net.ResponseVerbHandler.doVerb(ResponseVerbHandler.java:35)
> 2010-03-30_21:59:04.64973     at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:40)
> 2010-03-30_21:59:04.64973     at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 2010-03-30_21:59:04.64973     at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 2010-03-30_21:59:04.64973     at java.lang.Thread.run(Thread.java:636)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to