-
Nodes A, B, and C fully in the cluster
-
Local state before (1):
{:pairs {:a :b, :b :c, :c :a}}
-
D wants to join
-
D sends
prepare-join-cluster
(1) -
A, B, C, and D play the log
-
D encounters (1)
- Pre:
{:pairs {:a :b, :b :c, :c :a}}
- Post:
{:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
- determines D will attach to A. Records this in the local state.
- adds watch to A
- C dies. B sends
leave-cluster
(2) for C. - sends
notify-join-cluster
(3)
- Pre:
-
A, B, C encounters (1)
- Pre:
{:pairs {:a :b, :b :c, :c :a}}
- Post:
{:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
- ignore
- Pre:
-
A, C encounter (2):
- Pre:
{:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
- Post:
{:pairs {:a :b, :b :a}}
- Pre:
-
B encounters (2):
- Pre:
{:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
- Post:
{:pairs {:a :b, :b :a}}
- transitively closes the gap, adds watch to A
- Pre:
-
D encounters (2):
- Pre:
{:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
- Post:
{:pairs {:a :b, :b :a}}
- Aborts
- Pre:
-
A, B, C encounter (3):
- Pre:
{:pairs {:a :b, :b :a}}
- Post:
{:pairs {:a :b, :b :a}}
- ignore
- Pre: