Open GoogleCodeExporter opened 9 years ago
The root cause for the problem is that the "client" increments the vector clock
on behalf of the "master" BEFORE the record is sent to the "master". This way,
the "master" is unable to check whether the "original" vector clock was coming
from a conflicting path:
- Conflcting clocks: (1:1) vs (2:1)
- Incrementing (1:1) clock on behalf of master 2, results into (1:1, 2:1),
which is NOT conflicting with (2:1), but is AFTER (2:1)
Solution:
- Send original clock to master, PUT C with org. VC OVC=(1:1)
- Master calculates new VC NVC=(1:1, 2:1).
- Master should raise some ConflictWouldBeLost exception IF there is an
existing value with VC EVC which fulfills: OVC is CONCURRENT to EVC && NVC is
AFTER EVC
OVC is CONCURRENT to EVC && NVC is AFTER EVC means that that C is actually in
conflict with some existing value, but it would the existing value would be
overwritten because NVC is after EVC.
Original comment by derol...@googlemail.com
on 21 Jul 2011 at 9:18
Original issue reported on code.google.com by
derol...@googlemail.com
on 19 Jul 2011 at 12:32