diff options
| author | Antonin Kral <a.kral@bobek.cz> | 2010-09-24 19:01:03 +0200 |
|---|---|---|
| committer | Antonin Kral <a.kral@bobek.cz> | 2010-09-24 19:01:03 +0200 |
| commit | 0ad0c09511a04ebe837f2acb859d47f2aa4e038a (patch) | |
| tree | 109babcb556f6c5884b77853120717f0617c7a1e /db/repl/consensus.cpp | |
| parent | 03e58f81cad8dd4cfcd1530f327116f0cff6ceb3 (diff) | |
Imported Upstream version 1.6.3
Diffstat (limited to 'db/repl/consensus.cpp')
| -rw-r--r-- | db/repl/consensus.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/db/repl/consensus.cpp b/db/repl/consensus.cpp index 4eba17d61e0..4044538ec06 100644 --- a/db/repl/consensus.cpp +++ b/db/repl/consensus.cpp @@ -83,6 +83,17 @@ namespace mongo { return vUp * 2 > totalVotes(); } + bool Consensus::shouldRelinquish() const { + int vUp = rs._self->config().votes; + const long long T = rs.config().ho.heartbeatTimeoutMillis * rs.config().ho.heartbeatConnRetries; + for( Member *m = rs.head(); m; m=m->next() ) { + long long dt = m->hbinfo().timeDown(); + if( dt < T ) + vUp += m->config().votes; + } + return !( vUp * 2 > totalVotes() ); + } + static const int VETO = -10000; const time_t LeaseTime = 30; @@ -322,6 +333,7 @@ namespace mongo { void Consensus::electSelf() { assert( !rs.lockedByMe() ); assert( !rs.myConfig().arbiterOnly ); + assert( rs.myConfig().slaveDelay == 0 ); try { _electSelf(); } |
