|
|
|
|
|
by narush
1546 days ago
|
|
Ok, having read through the core of the algorithm, cool! Seems like the main key here is that move operations have timestamps associated with them, and this allows you to effectively linearize the operations (and ignore ones that result in invalid state). The tradeoff: you need to store all the operations you've ever seen, as you need to be able to detect conflicts between old ones. Question for the authors (if they are around): any ideas for how we might get to efficient pruning of old operations? My first thought was that you could have some notion of epoch, and once you move beyond that epoch, you accept no new operations from it. But then you realize that this requires nodes to agree on moving between epochs, which seems like it might require some fancy consensus protocol / a known set of nodes / mad complexity. I don't have any ideas. Do you all have some idea of how we might be able to prune this old log? Or even sketches of ideas? |
|
> However, in practice it is easy to truncate the log, because apply_op only examines the log prefix of operations whose timestamp is greater than that of the operation being applied. Thus, once it is known that all future operations will have a timestamp greater than t, then operations with timestamp t or less can be discarded from the log.
The main issue seems to be that we need to know about all the replicas that we want to be able to synchronize with - but I guess there isn't really a way around this.