### Background Currently, our CRDT uses three different types of timestamps: | clock type | representation | purpose | |-----|----------------|----------| | `Local` | replica id + u32 | uniquely identifies operations | | `Lamport` | replica id + u32 | provides a consistent total ordering for all operations | | `Global` | N local clocks | fully defines the partial ordering between all concurrent operations | All text operations include *each* type of timestamp. And every `Fragment` in a buffer's fragment tree contains both a local and a lamport timestamp. ### Change An operation can be uniquely identified by its lamport timestamp, so we don't really need a concept of a local timestamp. In this PR, I've removed the concept of a local timestamp. Version vectors (`clock::Global`) now store vectors of *lamport* timestamps. Eliminating local timestamps reduces the memory footprint of a buffer by four bytes per fragment, reduces the size of our `UpdateBuffer` RPC messages, and reduces the amount of data we need to store in our database for channel buffers. It also makes our CRDT a bit easier to understand, IMO, because there is now only one scalar value that we increment per replica. It's possible I'm missing something here though. @as-cii, @nathansobo it'd be good to get your 👀
11 files changedLine totals unavailable