Preserving causality
If we only pass the execution identifier as request metadata and tag tracing records with it, it is sufficient to reassemble that data into a single collection, but it is not sufficient to reconstruct the execution graph of causally-related activities. Tracing systems need to capture causality that allows assembling the data captured by the trace points in the correct sequence. Unfortunately, knowing which activities are truly causally-related is very difficult, even with very invasive instrumentation. Most tracing systems elect to preserve Lamport's happens-before relation [4], denoted as → and formally defined as the least strict partial order on events, such that:
If events a and b occur in the same process, then a → b if the occurrence of event a preceded the occurrence of event b
If event a is the sending of a message and event b is the reception of the message sent in event a, then a → b
The happens-before relation can be too indiscriminate if applied liberally...