You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Alex Petrov (Jira)" <ji...@apache.org> on 2020/04/20 16:06:00 UTC

[jira] [Commented] (CASSANDRA-15593) A possible read repair bug

    [ https://issues.apache.org/jira/browse/CASSANDRA-15593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17087888#comment-17087888 ] 

Alex Petrov commented on CASSANDRA-15593:
-----------------------------------------

[~james1] could you answer the question above?

What are the responses from the nodes that make you think that read repair isn't triggered? 

It is sort of expected that when you run with local_one against coordinator that owns the range, you won't trigger read repair. 

> A possible read repair bug
> --------------------------
>
>                 Key: CASSANDRA-15593
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15593
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Antonio
>            Assignee: Alex Lumpov
>            Priority: Normal
>
> cassandra version:2.1.15
> i have one dc and 3nodes 
> 1. 
> {code}
> create KEYSPACE test WITH replication = \{'class': 'NetworkTopologyStrategy', 'DC1':'3' } and durable_writes = 'true';
> {code}
> 2. 
> {code}
> create table test(a int , b int , c int , primary key(a)) with dclocal_read_repair_chance = 1.0;
> {code}
> 3. 
> {code}
> insert one row into table test,instert into test(a, b, c) values (1, 1, 1);
> {code}
>  
> and remove sstable on two nodes and result below:
> {code}
>     node1:have correct row 1 1 1
>     node2:doesn't have rf
>     node3:doesn't have rf
> {code}
> 4. and i use local_one select one by one like this:
> {code}
>     node1 un,node2 dn,node3 dn:return 1 1 1
>     node1 dn,node2 un,node3 dn:return null
>     node1 dn,node2 dn,node3 dn:return null 
> {code}
>     this prove node1 have correct rf
> 5. and i let all node un,user local_quarum to {{select , select * from test where a = 1;}}
>     but the read repair does't work every time(i test many times),that's the problem(same in 3.0.15)
>  
> i hope if i set dclocal_read_repair_chance = 1.0,every time i read by local_quarum, if any rf digest does't match,read repair will work,and repair all nodes
>  
> i.m not sure does's the problem happends in this code()
> wish for your reply,thanks
> {code}
> public void response(MessageIn<TMessage> message)
>     {
>         resolver.preprocess(message);        int n = waitingFor(message)
>               ? recievedUpdater.incrementAndGet(this)
>               : received;        if (n >= blockfor && resolver.isDataPresent())
>         {
>             ////this mean if return responses >= rf/2 +1 and a data response return,it start compare,does't all response
>             condition.signalAll();            // kick off a background digest comparison if this is a result that (may have) arrived after            // the original resolve that get() kicks off as soon as the condition is signaled            if (blockfor < endpoints.size() && n == endpoints.size())
>             {
>                 TraceState traceState = Tracing.instance.get();                if (traceState != null)
>                     traceState.trace("Initiating read-repair");
>                 StageManager.getStage(Stage.READ_REPAIR).execute(new AsyncRepairRunner(traceState));
>             }
>         }
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org