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