You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Antonio (Jira)" <ji...@apache.org> on 2020/02/24 03:47:00 UTC

[jira] [Created] (CASSANDRA-15593) seems reading repair bug

Antonio created CASSANDRA-15593:
-----------------------------------

             Summary: seems reading repair bug
                 Key: CASSANDRA-15593
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15593
             Project: Cassandra
          Issue Type: Bug
            Reporter: Antonio
            Assignee: Aleksey Yeschenko


cassandra version:2.1.15

i have one dc and 3nodes 

1. create KEYSPACE test WITH replication = \{'class': 'NetworkTopologyStrategy', 'DC1':'3' } and durable_writes = 'true';

2. create table test(a int , b int , c int , primary key(a)) with dclocal_read_repair_chance = 1.0;

3. insert one row into table test,instert into test(a, b, c) values (1, 1, 1); and remove sstable on two nodes and result below:

    node1:have correct row 1 1 1

    node2:doesn't have rf

    node3:doesn't have rf

4. and i use local_one select one by one like this:

    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 

    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
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));
            }
        }
    }



--
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