cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ryan Svihla (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-13315) Consistency is confusing for new users
Date Thu, 09 Mar 2017 21:38:38 GMT


Ryan Svihla commented on CASSANDRA-13315:

I don't think any should be removed, but nearly every time I dig into an EACH_QUORUM use case
with ends up being not what they want. EACH_QUORUM doesn't roll back the writes,
so even if it fails because of a lack of replicas you can still be returning the 'failed write'
successfully on the nodes it did succeed on, so in effect during DC connection outages unless
you just turn writes off you get divergence between the TWO DCs and reads in one DC show up
and not in another. Also several customers with EACH_QUORUM have had downgrading retry policy
on..defeating it entirely.

> Consistency is confusing for new users
> --------------------------------------
>                 Key: CASSANDRA-13315
>                 URL:
>             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.
> o
> 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 (EDIT based on Jonathan's comment):
> 1. Remove the "serial consistency" level of consistency levels and just have all consistency
levels in one bucket to set, conditions still need to be required for SERIAL/LOCAL_SERIAL
> 2. add 3 new consistency levels pointing to existing ones but that infer intent much
more cleanly:
> EDIT better names bases on comments.
>    * EVENTUALLY = LOCAL_ONE reads and writes
>    * STRONG = LOCAL_QUORUM reads and writes
>    * SERIAL = LOCAL_SERIAL reads and writes (though a ton of folks dont know what SERIAL
means so this is why I suggested TRANSACTIONAL even if its not as correct as Id like)
> 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

View raw message