summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2014-09-26 13:03:11 -0400
committerSpencer T Brody <spencer@mongodb.com>2014-09-27 14:17:29 -0400
commit96b64712666312fe9103b8f9a5c28e3479ed1d18 (patch)
tree259e5678bfbd72d5ecbfd9ae210d8ec11b1c6054
parentaa656086587c2c5513d884614ae55a38ec838df3 (diff)
downloadmongo-96b64712666312fe9103b8f9a5c28e3479ed1d18.tar.gz
SERVER-15420 Fix potential race in coming out of maintenance mode
-rw-r--r--src/mongo/db/repl/repl_coordinator_hybrid.cpp14
-rw-r--r--src/mongo/db/repl/sync_tail.cpp4
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()) {