it isn't necessary to keep track of a list of CSNs
If it doesn't keep track of the CSNs, how does it know what data needs to be
replicated?
That is, imagine replica A, whose latest CSN is 48, talks to replica B, whose latest CSN
is 40. Clearly replica A should send some data to replica B. But if it isn't keeping
track of what data is associated with CSNs 41 through 48, how does it know what data to
send?
by asking the other node for its current ruv
can determine which if any of the changes it has need to be propagated to the peer.
In addition, the CSNs are apparently a timestamp and replica ID. So imagine a simple ring
topology of replicas, A-B-C-D-E-(A), all in sync. Now imagine simultaneous changes on
replicas A and C. C has a new CSN of, say, 100C, and it replicates that to B and D. At the
same time, A replicates its new CSN of 100A to B and E. Now E has a new CSN. Is it 100A or
101E?
If E's new max CSN is 100A, then when it checks with D, D has a latest CSN of 100C,
which is greater than 100A, so the algorithm would seem to imply that there's nothing
to replicate and the change that started at A doesn't get replicated to D.
If E's max CSN is 101E, then, when D checks in with its 101D, it thinks it doesn't
have anything to send. I suppose in this scenario that the data would get there coming
from the other direction. But if E's max CSN is 101E, eventually it's going to
check in with A, which has a max CSN of 100A, so it would think that it needed to
replicate that same data back to A, but it's already there. This is an obvious
infinite loop.
I'm certain I'm missing something or misunderstanding something, but I don't
understand what, and these details are what I'm trying to unravel.