summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatt dannenberg <matt.dannenberg@10gen.com>2015-02-10 12:29:46 -0500
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-02-11 18:21:22 -0500
commit6f925ef3c327be1806a9895053023d155148d964 (patch)
tree3110dbb41f16925c8c900f36a8978e64f23e37e7
parent5e579b03fb55259037d0f348ee0c7c1d702b69c9 (diff)
downloadmongo-6f925ef3c327be1806a9895053023d155148d964.tar.gz
SERVER-17202 return to RECOVERING if an error is encountered during a rollback to avoid being trapped in ROLLBACK
(cherry picked from commit 5ff520902528d5fff857632e9d03534cf3761884)
-rw-r--r--src/mongo/db/repl/rs_rollback.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mongo/db/repl/rs_rollback.cpp b/src/mongo/db/repl/rs_rollback.cpp
index 0ff7e538aef..bdeca700cf1 100644
--- a/src/mongo/db/repl/rs_rollback.cpp
+++ b/src/mongo/db/repl/rs_rollback.cpp
@@ -780,6 +780,14 @@ namespace {
}
catch (...) {
replCoord->incrementRollbackID();
+
+ if (!replCoord->setFollowerMode(MemberState::RS_RECOVERING)) {
+ warning() << "Failed to transition into " <<
+ MemberState(MemberState::RS_RECOVERING) << "; expected to be in state " <<
+ MemberState(MemberState::RS_ROLLBACK) << "but found self in " <<
+ replCoord->getMemberState();
+ }
+
throw;
}
replCoord->incrementRollbackID();