[ https://issues.apache.org/jira/browse/CASSANDRA-13315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15903379#comment-15903379 ]
Jonathan Ellis commented on CASSANDRA-13315: -------------------------------------------- I like this idea a lot. We have a lot more experience now with how people use and misuse CL in the wild so I am comfortable getting a lot more opinionated in how we push people towards certain options and away from others. 1/2: The dual CL for Serial isn't for what to do w/ no condition, it's for the "commit" to EC land from the Paxos sandbox. So mandating a condition (don't we already?) doesn't make that go away. But, I think we could make that default to Q and call it good. (I'm having trouble thinking of a situation where you would need LWT, which requires a quorum to participate already, but also need lower CL on commit.) 3: I would bikeshed this to # EVENTUAL # STRONG # SERIAL 4. It sounds like we can do all of this at the drivers level except for adding some aliases to CQLSH. I don't see any benefit to adding synonyms at the protocol level. 5. How do we give power users the ability to use classic CL if they need it? > Consistency is confusing for new users > -------------------------------------- > > Key: CASSANDRA-13315 > URL: https://issues.apache.org/jira/browse/CASSANDRA-13315 > Project: Cassandra > Issue Type: Improvement > Reporter: Ryan Svihla > > New users really struggle with consistency level and fall into a large number > of tarpits trying to decide on the right one. > 1. There are a LOT of consistency levels and it's up to the end user to > reason about what combinations are valid and what is really what they intend > it to be. Is there any reason why write at ALL and read at CL TWO is better > than read at CL ONE? > 2. They require a good understanding of failure modes to do well. It's not > uncommon for people to use CL one and wonder why their data is missing. > 3. The serial consistency level "bucket" is confusing to even write about and > easy to get wrong even for experienced users. > So I propose the following steps: > 1. Remove the "serial consistency" level of consistency levels and just have > all consistency levels in one bucket at the protocol level. > 2. To enable #1 just reject writes or updates done without a condition when > SERIAL/LOCAL_SERIAL is specified. > 3. add 3 new consistency levels pointing to existing ones but that infer > intent much more cleanly: > * EVENTUALLY_CONSISTENT = LOCAL_ONE reads and writes > * HIGHLY_CONSISTENT = LOCAL_QUORUM reads and writes > * TRANSACTIONALLY_CONSISTENT = LOCAL_SERIAL reads and writes > for global levels of this I propose keeping the old ones around, they're > rarely used in the field except by accident or particularly opinionated and > advanced users. > Drivers should put the new consistency levels in a new package and docs > should be updated to suggest their use. Likewise setting default CL should > only provide those three settings and applying it for reads and writes at the > same time. > CQLSH I'm gonna suggest should default to HIGHLY_CONSISTENT. New sysadmins > get surprised by this frequently and I can think of a couple very major > escalations because people were confused what the default behavior was. > The benefit to all this change is we shrink the surface area that one has to > understand when learning Cassandra greatly, and we have far less bad initial > experiences and surprises. New users will more likely be able to wrap their > brains around those 3 ideas more readily then they can "what happens when I > have RF2, QUROUM writes and ONE reads". Advanced users get access to all the > way still, while new users don't have to learn all the ins and outs of > distributed theory just to write data and be able to read it back. -- This message was sent by Atlassian JIRA (v6.3.15#6346)