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