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

Jonathan Ellis commented on CASSANDRA-5062:
-------------------------------------------

I think we can fix the "partial commit" problem in my diagram 3.  The key is 
forcing CAS updates to occur with strictly increasing column (cell) timestamps. 
 Then, we can rely on standard "use the newest value" read-repair.  
Specifically:
# Instead of replicas checking raw timeuuid order for propose/promise, they 
will require that a new ballot be *larger* in the time component than an 
accepted ballot or mostRecentCommitted.  (We do still want to use a timeuuid 
value though instead of a raw timestamp to guarantee uniqueness across 
proposals.)
# Coordinators will generate ballots from the min timestamp in the new columns 
being proposed.  Thus, any committed proposal will have a higher timestamp than 
any previously committed one.

The good:
# No need for a hairy mess of CAS ballot order trumping timestamp order during 
HH/AES/RR.  Much easier if ballot/timestamp order are the same.
# Non-CAS ops can be mixed in with CAS ones with sane results (as long as 
potentially concurrent ones are all CAS, of course).

The bad:
# Just the obvious (big) one: we're rate-limited by both clock resolution and 
clock skew.  But, this is reasonable for our goals for 2.0.  And I'm not 
actually sure it's even possible to avoid, if we want to allow mixing CAS and 
non-CAS ops in the same CF (see "hairy mess" above).

Notes:
# Rejecting "newer" proposals w/ equal time components slows us down (we return 
false and client has to try again w/ a newer ballot) but does not compromise 
correctness.
# Different CAS ops may operate on different sets of columns, so because we RR 
for one CAS op does not mean that we've caught up the affected replicas 
entirely, but it does mean we've caught them up for the columns being checked 
on this time, which is what we care about.

                
> Support CAS
> -----------
>
>                 Key: CASSANDRA-5062
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5062
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: API, Core
>            Reporter: Jonathan Ellis
>             Fix For: 2.0
>
>         Attachments: half-baked commit 1.jpg, half-baked commit 2.jpg, 
> half-baked commit 3.jpg
>
>
> "Strong" consistency is not enough to prevent race conditions.  The classic 
> example is user account creation: we want to ensure usernames are unique, so 
> we only want to signal account creation success if nobody else has created 
> the account yet.  But naive read-then-write allows clients to race and both 
> think they have a green light to create.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to