Tracking causality in distributed systems: a suite of efficient protocols

Vector clocks are the appropriate mechanism to track causality among the events produced by a distributed computation. Traditional implementations of vector clocks require application messages to piggyback a vector of n integers (where n is the number of processes). This paper considers the tracking of the causality relation on a subset of events (namely, the events that are defined as “relevant” from the application point of view). It first proposes simple and efficient implementations of vector clocks where the size of message timestamps can be less than n, in a context where communication channels are not required to be FIFO, and where there is no a priori information on the connectivity of the communication graph or the communication pattern. Then, it presents a protocol that provides a correct timestamping of the relevant events in presence of the following constraint: a message timestamp can piggyback at most b event identifiers (where b is a predefined constant, 1≤ b≤ n). To ensure this constraint, processes can be forced to produce additional “null” relevant events. Finally, the paper presents and proves correct a protocol that tracks (on-thefly and without the help of an external observer) the immediate predecessors of each relevant event. This set of protocols defines a suite of protocols that, in addition to their efficiency, provides a comprehensive view of causality tracking in distributed systems.