summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2016-11-15 09:53:47 -0500
committerJudah Schvimer <judah@mongodb.com>2016-11-15 09:53:47 -0500
commit1ebe71d22dfa865fd451909a666305f581302f5c (patch)
tree364ff96823ecfb6946f3f90a9715a785f07f5ea3
parentb476c357ac3bee4134d8fca884258460b214ebd8 (diff)
downloadmongo-1ebe71d22dfa865fd451909a666305f581302f5c.tar.gz
SERVER-27028 linearizable read concern checks if node is still primary before it writes noop
-rw-r--r--src/mongo/db/read_concern.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/mongo/db/read_concern.cpp b/src/mongo/db/read_concern.cpp
index 81b1d3ebb75..65ec555eaf7 100644
--- a/src/mongo/db/read_concern.cpp
+++ b/src/mongo/db/read_concern.cpp
@@ -143,6 +143,12 @@ Status waitForLinearizableReadConcern(OperationContext* txn) {
ScopedTransaction transaction(txn, MODE_IX);
Lock::DBLock lk(txn->lockState(), "local", MODE_IX);
Lock::CollectionLock lock(txn->lockState(), "local.oplog.rs", MODE_IX);
+
+ if (!replCoord->canAcceptWritesForDatabase("admin")) {
+ return {ErrorCodes::NotMaster,
+ "No longer primary when waiting for linearizable read concern"};
+ }
+
MONGO_WRITE_CONFLICT_RETRY_LOOP_BEGIN {
WriteUnitOfWork uow(txn);