On Wed, Jul 23, 2014 at 1:18 PM, DuyHai Doan <doanduy...@gmail.com> wrote:

> Why that ? In worst case, CL.ANY will write hints for replicas that are
> down. If will be extraordinary unlucky to have all replicas down at the
> same time
>

Hints are not writes for the purposes of consistency or durability, so your
write hasn't actually succeeded. Most people don't have applications which
need a database to potentially persist a write.

In addition, the implementation details of Hinted Handoff can make ANY a
meaningful contributor to cascading failure mode when nodes are actually
hard down, because instead of excepting with not available exception (which
gives your app a chance to back off), you write hints. There is some
throttling in terms of how many hints can be "in flight" at once, but ones
over the threshold are dropped on the floor. I've seen nodes with more
hints data than actual data, and which were completely unable to ever
deliver and purge these hints, though they uselessly compacted them for
weeks on end. In most configs, you will end up discarding some subset of
these hints in the course of your cascading failure, but you will probably
not know which ones. You will also discard 100% of hints after three hours
in the default config. You might be happier to just get an exception at the
start of the incident, back off your application access a bit, and fix the
small subset of affected nodes?

In the future when hints are not handled via Column Families, ANY probably
gets a lot less risky in terms of overload-with-undelivered-hints, but
probably still doesn't actually provide what I consider worthwhile benefit.
It is of course possible that I have just never had or heard of a case for
which it was appropriate or necessary.

tl;dr - CL.ANY creates more risk of cases where you will write a bunch of
hints, and cases where you write a bunch of hints are almost never the
solution to any actual problem, because hints are not writes. If you really
really need "extreme" availability and can't do it via increasing RF, maybe
you might want to consider using CL.ANY. But probably not.

=Rob

Reply via email to