summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/bgsync.cpp
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2017-10-05 18:57:19 -0400
committerSpencer T Brody <spencer@mongodb.com>2017-10-16 18:05:08 -0400
commitae9262c5c48b378216f276ca150204dff63f04b4 (patch)
tree5ed77d9babd0ab4be195db05013c232012178f9c /src/mongo/db/repl/bgsync.cpp
parentd8279111b61afac242ddbb9f6d9697bbd14ed9d4 (diff)
downloadmongo-ae9262c5c48b378216f276ca150204dff63f04b4.tar.gz
SERVER-31431 Ensure that all state transitions in or out of SECONDARY occur with the global X lock held
Diffstat (limited to 'src/mongo/db/repl/bgsync.cpp')
-rw-r--r--src/mongo/db/repl/bgsync.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/mongo/db/repl/bgsync.cpp b/src/mongo/db/repl/bgsync.cpp
index 1ae84415b4a..f2c369ea0bd 100644
--- a/src/mongo/db/repl/bgsync.cpp
+++ b/src/mongo/db/repl/bgsync.cpp
@@ -364,6 +364,10 @@ void BackgroundSync::_produce() {
// Mark yourself as too stale.
_tooStale = true;
+ // Need to take global X lock to transition out of SECONDARY.
+ auto opCtx = cc().makeOperationContext();
+ Lock::GlobalWrite globalWriteLock(opCtx.get());
+
error() << "too stale to catch up -- entering maintenance mode";
log() << "Our newest OpTime : " << lastOpTimeFetched;
log() << "Earliest OpTime available is " << syncSourceResp.earliestOpTimeSeen;