You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "DOAN DuyHai (JIRA)" <ji...@apache.org> on 2016/01/16 00:23:39 UTC

[jira] [Updated] (CASSANDRA-11023) Restrict mutation consistency level to QUORUM+ for LWT

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

DOAN DuyHai updated CASSANDRA-11023:
------------------------------------
    Issue Type: Improvement  (was: Bug)

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