Skip to content

Latest commit

 

History

History
41 lines (32 loc) · 1.24 KB

example-6.md

File metadata and controls

41 lines (32 loc) · 1.24 KB
Example 6: 3 node cluster, 1 peer fails to join due to 1 peer dying during 3-phase join
  • 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)
  • 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
  • A, C encounter (2):

    • Pre: {:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
    • Post: {:pairs {:a :b, :b :a}}
  • 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
  • D encounters (2):

    • Pre: {:pairs {:a :b, :b :c, :c :a} :prepared {:d :a}}
    • Post: {:pairs {:a :b, :b :a}}
    • Aborts
  • A, B, C encounter (3):

    • Pre: {:pairs {:a :b, :b :a}}
    • Post: {:pairs {:a :b, :b :a}}
    • ignore