I wanted to confirm that .snapshot() on a transaction provides a true snapshot level isolation for get()/getRange() calls? The documentation simply says that this “reduces” conflicts but does not explicitly states the guarantees.
More precisely, if at some time t1, keys a and b have values 1 and 2 respectively, and a snapshot read operation was started at t1 on these keys. Concurrently, two other write transactions modified these keys as follows: tr2 (a=10, b=11) and tr3 (a=20, b=21).
If I understand correctly, under snapshot isolation, possible read value combinations should be:
i) a=1, b=2 OR
ii) a=10, b=11 OR
iii) a=20, b=21
Can I expect that only one of these possible combination of values will be returned? Or is there a possibility to get back value pairs like <a=1, b=10> or <a=1, b=21> etc.?