Title: Efficient Timestamps for Capturing Causality
Abstract: Consider an asynchronous system consisting of processes that communicate via message-passing. The processes communicate over a potentially {\em incomplete} communication network consisting of reliable bidirectional communication channels. Thus, not every pair of processes is necessarily able to communicate with each other directly. % For instance, when the communication network is a {\em star} graph, there is a {\em central} process % that can communicate with all the remaining processes (which are called {\em radial} processes), % but the radial processes cannot communicate with each other directly. The goal of the algorithms discussed in this paper is to assign timestamps to the events at all the processes such that (a) distinct events are assigned distinct timestamps, and (b) the happened-before relationship between the events can be inferred from the timestamps. We consider three types of algorithms for assigning timestamps to events: (i) Online algorithms that must (greedily) assign a timestamp to each event when the event occurs. (ii) Offline algorithms that assign timestamps to event after a finite execution is complete. (iii) Inline algorithms that assign a timestamp to each event when it occurs, but may modify some elements of a timestamp again at a later time. For specific classes of graphs, particularly {\em star} graphs and graphs with connectivity $\geq 1$, the paper presents bounds on the length of vector timestamps assigned by an {\em online} algorithm. The paper then presents an {\em inline} algorithm, which typically assigns substantially smaller timestamps than the optimal-length {\em online} vector timestamps. In particular, the inline algorithm assigns timestamp in the form of a tuple containing $2c+2$ integer elements, where $c$ is the size of the vertex cover for the underlying communication graph.