Message/Author 


I asked about this in a previous discussion about ordering, but unfortunately there was no response. If we consider the following scenario where A , B and C are different participants: (Dashes are the time line increasing towards righthand side direction) A writes 'x' at some time. B processes the sample and writes 'y'. The third participant, C, first receives the sample y (which is caused by x) and then receives the sample x. Looking from C's perspective; How would C know that it did not yet receive the 'x', when 'y' is received? In the literature, the relation between x and y is called a "happens before" relationship and the problem is known as the causality error. (various algorithms cope with this problem, like 'vector time'). Timestamps (alone) seem to be useless in this scenario as the third receiver does not know how long to wait and see if another sample is coming after on_data_available call? The way using source timestamps is to receive all updates and let them be sorted by DDS, right? 

Maverick
posted on Saturday, March 28, 2009  03:27 am



I guess the situation you have considered could be solved if you model your data properly. Is C supposed to receive both x and y? I dont see why it should be receiving both. If say, C expects to see both x and y, then why not have B append x to the data it publishes and publish say z that contains x and y. That way C can corelate y for an x. 


Thank you for your response. I think of possibility to embed related data to y. If this data is compact (ex. a small data like a coordinate) then it is an effective solution. But the relation spans more than one topic and/or related data is not compact then the types will get dirty. I think about a more general solution based on identification of samples by the senders. If the sender attaches a sequence number to 'x', B can put the last received sequence number of 'x' in 'y', so that C can detect the not received sample and wait for it. Before going into this kind of solutions, I was just wondering if I missed something in DDS. 

Back to top 
