123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- # The empty quorum commits "everything". This is useful for its use in joint
- # quorums.
- committed
- ----
- <empty majority quorum>∞
- # A single voter quorum is not final when no index is known.
- committed cfg=(1) idx=(_)
- ----
- idx
- ? 0 (id=1)
- 0
- # When an index is known, that's the committed index, and that's final.
- committed cfg=(1) idx=(12)
- ----
- idx
- > 12 (id=1)
- 12
- # With two nodes, start out similarly.
- committed cfg=(1, 2) idx=(_,_)
- ----
- idx
- ? 0 (id=1)
- ? 0 (id=2)
- 0
- # The first committed index becomes known (for n1). Nothing changes in the
- # output because idx=12 is not known to be on a quorum (which is both nodes).
- committed cfg=(1, 2) idx=(12,_)
- ----
- idx
- x> 12 (id=1)
- ? 0 (id=2)
- 0
- # The second index comes in and finalize the decision. The result will be the
- # smaller of the two indexes.
- committed cfg=(1,2) idx=(12,5)
- ----
- idx
- x> 12 (id=1)
- > 5 (id=2)
- 5
- # No surprises for three nodes.
- committed cfg=(1,2,3) idx=(_,_,_)
- ----
- idx
- ? 0 (id=1)
- ? 0 (id=2)
- ? 0 (id=3)
- 0
- committed cfg=(1,2,3) idx=(12,_,_)
- ----
- idx
- xx> 12 (id=1)
- ? 0 (id=2)
- ? 0 (id=3)
- 0
- # We see a committed index, but a higher committed index for the last pending
- # votes could change (increment) the outcome, so not final yet.
- committed cfg=(1,2,3) idx=(12,5,_)
- ----
- idx
- xx> 12 (id=1)
- x> 5 (id=2)
- ? 0 (id=3)
- 5
- # a) the case in which it does:
- committed cfg=(1,2,3) idx=(12,5,6)
- ----
- idx
- xx> 12 (id=1)
- > 5 (id=2)
- x> 6 (id=3)
- 6
- # b) the case in which it does not:
- committed cfg=(1,2,3) idx=(12,5,4)
- ----
- idx
- xx> 12 (id=1)
- x> 5 (id=2)
- > 4 (id=3)
- 5
- # c) a different case in which the last index is pending but it has no chance of
- # swaying the outcome (because nobody in the current quorum agrees on anything
- # higher than the candidate):
- committed cfg=(1,2,3) idx=(5,5,_)
- ----
- idx
- x> 5 (id=1)
- > 5 (id=2)
- ? 0 (id=3)
- 5
- # c) continued: Doesn't matter what shows up last. The result is final.
- committed cfg=(1,2,3) idx=(5,5,12)
- ----
- idx
- > 5 (id=1)
- > 5 (id=2)
- xx> 12 (id=3)
- 5
- # With all committed idx known, the result is final.
- committed cfg=(1, 2, 3) idx=(100, 101, 103)
- ----
- idx
- > 100 (id=1)
- x> 101 (id=2)
- xx> 103 (id=3)
- 101
- # Some more complicated examples. Similar to case c) above. The result is
- # already final because no index higher than 103 is one short of quorum.
- committed cfg=(1, 2, 3, 4, 5) idx=(101, 104, 103, 103,_)
- ----
- idx
- x> 101 (id=1)
- xxxx> 104 (id=2)
- xx> 103 (id=3)
- > 103 (id=4)
- ? 0 (id=5)
- 103
- # A similar case which is not final because another vote for >= 103 would change
- # the outcome.
- committed cfg=(1, 2, 3, 4, 5) idx=(101, 102, 103, 103,_)
- ----
- idx
- x> 101 (id=1)
- xx> 102 (id=2)
- xxx> 103 (id=3)
- > 103 (id=4)
- ? 0 (id=5)
- 102
|