how are you? I've been investigating the causality filter to see if I can help with the causal stability feature. I have a couple of questions.
- Why causality filter is being executed twice at the source? First when ReplicationRead is received and after when ReplicationReadSuccess is received. The comment says "Post-exclude events using a possibly updated version vector received from the target" but I can't understand when that updated version vector could arrive between a ReplicationRead and its corresponding ReplicationReadSuccess.
- Why EventLog.replicaVersionVectors is needed if ReplicationRead includes the currentVersionVector of the target?
- Why is fromSequenceNr included in ReplicationRead? Isn't sequenceNr local to an event log? I assumed that ReplicationRead only included currentVersionVector and then all (1) the events were causaly filtered, instead only events between fromSequenceNr and toSequenceNr are filtered.
- Filtering all events like I've said in (1) will not be very performant, that's why I asked for causal stability, however, if Eventuate is using fromSequenceNr to avoid this I don't see what will be the benefit of causal stability in replication like I do for Pure OP based CRDT where the goal is reduce the size in memory of CRDTs discarding timestamps that are no longer needed.