Merge pull request #2150 from weaveworks/issues/2139-zero-quorum

Don't try to form IPAM ring with a bogus quorum size

Fixes #2139.
This commit is contained in:
Matthias Radestock committed 2016-04-11 13:31:09 +01:00
commit 56bfe15eca
3 files changed
+18 -4

No files matched your search

+1 -1
View File
@@ -86,7 +86,7 @@ func NewAllocator(config Config) *Allocator {
if config.IsObserver {
participant = paxos.NewObserver()
} else {
participant = paxos.NewNode(config.OurName, config.OurUID, 1)
participant = paxos.NewNode(config.OurName, config.OurUID, 0)
}
return &Allocator{
ourName: config.OurName,
+14 -3
View File
@@ -117,6 +117,7 @@ func TestBootstrap(t *testing.T) {
CheckAllExpectedMessagesSent(alloc1, alloc2)
// Check that tryPendingOps doesn't cause anything to happen here
alloc1.actionChan <- func() { alloc1.tryPendingOps() }
AssertNothingSent(t, done)
@@ -129,14 +130,24 @@ func TestBootstrap(t *testing.T) {
ExpectBroadcastMessage(alloc1, nil)
alloc1.OnGossipBroadcast(alloc2.ourName, alloc2.Encode())
// both nodes will get consensus now so initialize the ring
ExpectBroadcastMessage(alloc2, nil)
CheckAllExpectedMessagesSent(alloc1, alloc2)
// at this point, both nodes have seen each other, but don't have a valid proposal
// so there is another exchange of messages
ExpectBroadcastMessage(alloc2, nil)
alloc2.OnGossipBroadcast(alloc1.ourName, alloc1.Encode())
// we have consensus now so alloc1 will initialize the ring
ExpectBroadcastMessage(alloc1, nil)
alloc1.OnGossipBroadcast(alloc2.ourName, alloc2.Encode())
CheckAllExpectedMessagesSent(alloc1, alloc2)
// alloc2 receives the ring and does not reply
alloc2.OnGossipBroadcast(alloc1.ourName, alloc1.Encode())
CheckAllExpectedMessagesSent(alloc1, alloc2)
alloc1.OnGossipBroadcast(alloc2.ourName, alloc2.Encode())
// now alloc1 should have space
AssertSent(t, done)
+3
View File
@@ -241,6 +241,9 @@ func (node *Node) pickValue() Value {
// Has a consensus been reached, based on the known claims of other nodes?
func (node *Node) Consensus() (bool, AcceptedValue) {
if node.quorum == 0 {
return false, AcceptedValue{}
}
counts := map[ProposalID]uint{}
for _, claims := range node.knows {