mon/Elector: bootstrap on timeout

Currently if an election times out we call a new
election.  If we have never joined a quorum, bootstrap
instead. This is heavier weight, but captures the case
where, during bootstrap:

 - a and b have learned each others' addresses
 - everybody calls an election
 - a and b form a quorum
 - c loops trying to call an election, but is ignored
   because a and b don't see its address in the monmap

See logs:
  ubuntu@teuthology:/var/lib/teuthworker/archive/sage-2014-02-14_13:50:04-ceph-deploy-wip-7212-sage-b-testing-basic-plana/83194

Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2014-02-15 08:59:51 -08:00
parent 4595c44ba1
commit cf4f7027e7

View File

@ -148,7 +148,10 @@ void Elector::expire()
victory(); victory();
} else { } else {
// whoever i deferred to didn't declare victory quickly enough. // whoever i deferred to didn't declare victory quickly enough.
start(); if (mon->has_ever_joined)
start();
else
mon->bootstrap();
} }
} }