diff options
author | Spencer T Brody <spencer@mongodb.com> | 2014-09-26 13:03:11 -0400 |
---|---|---|
committer | Spencer T Brody <spencer@mongodb.com> | 2014-09-27 14:17:29 -0400 |
commit | 96b64712666312fe9103b8f9a5c28e3479ed1d18 (patch) | |
tree | 259e5678bfbd72d5ecbfd9ae210d8ec11b1c6054 | |
parent | aa656086587c2c5513d884614ae55a38ec838df3 (diff) | |
download | mongo-96b64712666312fe9103b8f9a5c28e3479ed1d18.tar.gz |
SERVER-15420 Fix potential race in coming out of maintenance mode
-rw-r--r-- | src/mongo/db/repl/repl_coordinator_hybrid.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail.cpp | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/mongo/db/repl/repl_coordinator_hybrid.cpp b/src/mongo/db/repl/repl_coordinator_hybrid.cpp index d9c52b8aeae..dcd186802a9 100644 --- a/src/mongo/db/repl/repl_coordinator_hybrid.cpp +++ b/src/mongo/db/repl/repl_coordinator_hybrid.cpp @@ -282,19 +282,19 @@ namespace repl { } Status HybridReplicationCoordinator::setMaintenanceMode(OperationContext* txn, bool activate) { - Status legacyResponse = _legacy.setMaintenanceMode(txn, activate); _impl.setMaintenanceMode(txn, activate); + Status legacyResponse = _legacy.setMaintenanceMode(txn, activate); return legacyResponse; } bool HybridReplicationCoordinator::getMaintenanceMode() { - bool legacyMode(_legacy.getMaintenanceMode()); + //bool legacyMode(_legacy.getMaintenanceMode()); bool implMode(_impl.getMaintenanceMode()); - if (legacyMode != implMode) { - severe() << "maintenance mode mismatch between legacy and impl: " << - legacyMode << " and " << implMode; - fassertFailed(18810); - } +// if (legacyMode != implMode) { +// severe() << "maintenance mode mismatch between legacy and impl: " << +// legacyMode << " and " << implMode; +// fassertFailed(18810); +// } return implMode; } diff --git a/src/mongo/db/repl/sync_tail.cpp b/src/mongo/db/repl/sync_tail.cpp index f9016f42a61..51d04a6b1a7 100644 --- a/src/mongo/db/repl/sync_tail.cpp +++ b/src/mongo/db/repl/sync_tail.cpp @@ -275,13 +275,13 @@ namespace repl { namespace { void tryToGoLiveAsASecondary(OperationContext* txn) { + Lock::GlobalRead readLock(txn->lockState()); + if (getGlobalReplicationCoordinator()->getMaintenanceMode()) { // we're not actually going live return; } - Lock::GlobalRead readLock(txn->lockState()); - // Only state RECOVERING can transition to SECONDARY. MemberState state(getGlobalReplicationCoordinator()->getCurrentMemberState()); if (!state.recovering()) { |