The user will meet the required consistency unless you encounter some kind
of bug in cassandra.  You will either get the older value or the newer
value. If you read quorum, and maybe a write CL=1 just happened, you may
get the older or new value depending on if the node that received the
write was involved.  If you read quorum and your wrote CL=QUOROM, then you
may get the newer value or the older value depending on who gets their
first so to speak. 

In your scenario, if the read repair read from R2 just before the write is
applied, you get the old value.  If it read from R2 just after the write
was applied, it gets the new value.  BOTH of these met the consistency
constraint.  A better example to clear this up may be the following...  If
you read a value at CL=QUOROM, and you have a write 20ms later, you get
the old value, right?  And it met the consistency level, right?  NOW, what
about if the write is 1ms later?  What if it the right is .00001ms later?
It still met the consistency level, right?  If it is .00001ms before, you
get the new value as it repairs first with the new node.

It is just when programming, your read may get the newer value or older
value and generally if you write the code in a way that works, this
concept works out great in most cases(in some cases, you need to think a
bit differently and solve it other ways).

I hope that clears it up

Later,
Dean

On 10/24/12 8:02 AM, "shankarpnsn" <shankarp...@gmail.com> wrote:

>Hiller, Dean wrote
>> in general it is okay to get the older or newer value.  If you are
>>reading
>> 2 rows however instead of one, that may change.
>
>This is certainly interesting, as it could mean that the user could see a
>value that never met the required consistency. For instance with 3
>replicas
><R1,R2,R3> and a quorum consistency, assume that R1 is initiating a read
>(becomes the coordinator) - notices a conflict with R2 (assume R1 has a
>more
>recent value) and initiates a read repair with its value. Meanwhile R2 and
>R3 have seen two different writes with newer values than what was computed
>by the read repair. If R1 were to respond back to the user with the value
>that was computed at the time of read repair, wouldn't it be a value that
>never met the consistency constraint? I was thinking if this should
>trigger
>another round of repair that tries to reach the consistency constraint
>with
>a newer value or time-out, which is the expected case when you don't meet
>the required consistency. Please let me know if I'm missing something
>here. 
>
>
>
>--
>View this message in context:
>http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/What-does
>-ReadRepair-exactly-do-tp7583261p7583366.html
>Sent from the cassandra-u...@incubator.apache.org mailing list archive at
>Nabble.com.

Reply via email to