These are chat archives for RBMHTechnology/eventuate

Apr 2017
Gabriel Giussi
Apr 15 2017 14:15 UTC
Hi everyone, I'm wondering how are causality violations recognized in order to buffer elements until causality is achieved?, like the one @krasserm explains in his talk.
causality violation img.
In this case, DC3 receives a vector clock (2,3,0) from DC2 but its local clock is (1,0,1). So it is ok to say that if there is more than one j such that DCi[j] < DCi[j] for j != i there is potentially a causality violation?
In the example, DC3[j] < DC2[j] for j = {0,1}, but if DC3 were received the message from DC1 with vector clock (2,0,0) the local clock of DC3 would be (2,0,2) and the rule would no longer apply because DC3[j] < DC2[j] for j = {1}
Martin Krasser
Apr 15 2017 14:29 UTC
The presentation describes a blocking mechanism for preserving causality. Eventuate now implements a non-blocking mechanism using causality filters as explained in section "System Model" in RBMHTechnology/eventuate#314
see also the follow-up tweets ...
Martin Krasser
Apr 15 2017 14:35 UTC
Section 3.2 of describes the blocking mechanism (and also includes the ref to the original paper)
The approach taken by Eventuate is a hybrid of several approaches described in that paper.
Hope that helps
Gabriel Giussi
Apr 15 2017 16:06 UTC
It was very helpful @krasserm, thanks. The paper does a great job summarizing many concepts and it helped me to understand how the blocking algorithm works ("Once such message is received, all processes verify that the delivery conditions are satisfied (i.e., the sender slot in the message is one unit greater than the same slot in the receiver’s clock)." Page 8).
However I can't understand how causality filter (non-blocking mechanism) works. It's all about retrying the event replication until it could be written in the target log, instead of always receiving the event and buffer it?
What do you actually mean with redundant transmission of events during replication. ?