I think this would add a lot of complexity behind the scenes and be 
conceptually confusing, particularly for new users. The Cassandra consistency 
model is pretty elegant and this type of approach breaks that elegance in many 
ways. It would also only really be useful when the value has a high probability 
of being updated between a node going down and the value being read. Perhaps 
the simpler approach which is fairly trivial and does not require any Cassandra 
change is to simply downgrade your read from ALL to QUORUM when you get an 
unavailable exception for this particular read.

I think the general answerer for 'maximum consistency' is QUORUM reads/writes. 
Based on the fact you are using CL=ALL for reads I assume you are using CL=ONE 
for writes: this itself strikes me as a bad idea if you require 'maximum 
consistency for one critical operation'.

Dan


-----Original Message-----
From: Ryan King [mailto:r...@twitter.com] 
Sent: June-16-11 12:05
To: user@cassandra.apache.org
Subject: Re: Propose new ConsistencyLevel.ALL_AVAIL for reads

On Thu, Jun 16, 2011 at 8:18 AM, AJ <a...@dude.podzone.net> wrote:
> Good morning all.
>
> Hypothetical Setup:
> 1 data center
> RF = 3
> Total nodes > 3
>
> Problem:
> Suppose I need maximum consistency for one critical operation; thus I
> specify CL = ALL for reads.  However, this will fail if only 1 replica
> endpoint is down.  I don't see why this fail is necessary all of the time
> since the data could have been updated since the node became unavailable and
> it's data is old anyways.  If only one node goes down and it has the key I
> need, then the app is not 100% available and it could take some time making
> the node available again.
>
> Proposal:
> If all of the *available* replica nodes answer the read operation and the
> latest value timestamp is clearly AFTER the time the down node became
> unavailable, then this situation can meet the requirements for *near* 100%
> consistency since the value in the down node would be outdated anyway.
>  Clearly, the value was updated some time *after* the node went down or
> unavailable.  This way, you can have max availability when using read with
> CL.ALL... or something CL close in meaning to ALL.
>
> I say "near" 100% consistency to leave room for some situation where the
> unavailable node was only unavailable to the coordinating node for some
> reason such as a network issue and thus still received an update by some
> other route after it "appeared" unavailable to the current coordinating
> node.  In a situation like this, there is a chance the read will still not
> return the latest value.  So, this will not be truly 100% consistent which
> CL.ALL guarantees.  However, I think this logic could justify a new
> consistency level slightly lower than ALL, such as ALL_AVAIL.
>
> What do you think?  Is my logic correct?  Is there a conflict with the
> architecture or base principles?  This fits with the tunable consistency
> principle for sure.

I don't think this buys you anything that you can't get with quorum
reads and writes.

-ryan
No virus found in this incoming message.
Checked by AVG - www.avg.com 
Version: 9.0.901 / Virus Database: 271.1.1/3707 - Release Date: 06/16/11 
02:34:00

Reply via email to