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

Sylvain Lebresne resolved CASSANDRA-11023.
------------------------------------------
    Resolution: Invalid

Except that this is not how Paxos work. The non-serial consistency for LWT only 
matter for client visibility, not for paxos internally. More precisely a given 
round of Paxos will always [wait for a quorum of participants to have seen the 
previous commit before processing a new 
one|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/service/StorageProxy.java#L435-L449].


> Restrict mutation consistency level to QUORUM+ for LWT
> ------------------------------------------------------
>
>                 Key: CASSANDRA-11023
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11023
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Coordination
>            Reporter: DOAN DuyHai
>
> 5 nodes cluster, RF = 3
> → LWT consistency = SERIAL
> → Mutation consistency = ONE
> 1. Client 1 sends a INSERT INTO test (partition_key, value)  VALUES(*1*, 
> *‘ONE’*) IF NOT EXISTS
> 2. Paxos round successfully gets ballot1
> 3. The IF NOT EXISTS condition is validated (reading with QUORUM on all 
> replicas)
> 4. Paxos round validated
> 5. Mutation applied using consistency level ONE. Mutation pushed to replicas 
> A, B and C 
> 6. Replica A sends back acks. *Replicas B and C did not receive the mutation* 
> (temporary network issue). The LWT operation is successful since we do not 
> wait for acks from B and C
> This LWT is considered successful
> 7. Client 2 starts a LWT : INSERT INTO test (partition_key, value)  
> VALUES(*1*, *‘TWO’*) IF NOT EXISTS
> 8. Paxos round successfully gets ballot2 (ballot2 > ballot1)
> 9. The IF NOT EXISTS condition is validated (*reading with QUORUM and replica 
> B and C reply that partition 1 does not exist*)
> 10. The semantics of LWT is violated because indeed the partition already 
> exists (because first LWT succeeded) with value = ‘ONE’
>  I'm not saying that there is a bug in our LWT implementation, it works as 
> designed. The problem here is that I can't see any legit/sensible use-case 
> for LWT with mutation CL=ONE since it opens the door for edge cases like the 
> one described above and it defeats the purpose of Compare And Swap. 
> Furthermore it can confuse a lot of people not familiar of how LWT is 
> implemented internally.
>  Ideally, we should remove/ignore mutation CL for LWT and always use 
> QUORUM/LOCAL_QUORUM. But for the sake of not breaking the existing API, it 
> would be sufficient enough to validate and reject mutation CL < QUORUM.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to