Sat Feb 8 14:32:32 EST 2020

switch reactive direction

So a highly available distributed system acts as a reactive network
where the causality switches direction.  Each of the nodes can
initiate a state change with all of the other ones following.

I think that is the main idea between lamport timestamps and vector
clocks: focus on causality.

This still doesn't quite fix the "crossing paths" problem. So how is
that usually tackled?

Crossing paths is actually quite common in the following case:

- system A and B both have a reference to some lazy resource C.

- system A and B split

- resource C disappears, but A and B don't notice it

- both A and B have a need for resource C, see it is not there, and
  both pick a replacement: A picks D, and B picks E.

- on merge, which should become the consensus?

Maybe this is more convoluted than I set out.

If they both implement the same interface, it probably shouldn't