summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVesselina Ratcheva <vesselina.ratcheva@10gen.com>2019-07-09 18:26:21 -0400
committerVesselina Ratcheva <vesselina.ratcheva@10gen.com>2019-07-10 15:08:07 -0400
commit79d6588c61d60627e015cab590026dc08b0f1c50 (patch)
tree5a577c12655ea6f9519b7e2ac3fc9dda37f81913
parent6dfb1512ab0a47fb9059f76831f0234a3d4e4679 (diff)
downloadmongo-79d6588c61d60627e015cab590026dc08b0f1c50.tar.gz
SERVER-41036 Make ReadWriteAbility::_canAcceptNonLocalWrites an AtomicWord<bool>
(cherry picked from commit 21746d3302f37a9d5716c2f249b99d7f0e273344)
-rw-r--r--src/mongo/db/repl/replication_coordinator_impl.cpp10
-rw-r--r--src/mongo/db/repl/replication_coordinator_impl.h2
2 files changed, 6 insertions, 6 deletions
diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp
index 928c6d33b03..99c4f9b48ae 100644
--- a/src/mongo/db/repl/replication_coordinator_impl.cpp
+++ b/src/mongo/db/repl/replication_coordinator_impl.cpp
@@ -979,8 +979,8 @@ void ReplicationCoordinatorImpl::signalDrainComplete(OperationContext* txn,
_drainFinishedCond.notify_all();
invariant(_getMemberState_inlock().primary());
- invariant(!_canAcceptNonLocalWrites);
- _canAcceptNonLocalWrites = true;
+ invariant(!_canAcceptNonLocalWrites.loadRelaxed());
+ _canAcceptNonLocalWrites.store(true);
lk.unlock();
_setFirstOpTimeOfMyTerm(_externalState->onTransitionToPrimary(txn, isV1ElectionProtocol()));
@@ -1936,7 +1936,7 @@ bool ReplicationCoordinatorImpl::canAcceptWritesForDatabase(StringData dbName) {
// accept writes. Similarly, writes are always permitted to the "local" database. Finally,
// in the event that a node is started with --slave and --master, we allow writes unless the
// master/slave system has set the replAllDead flag.
- if (_canAcceptNonLocalWrites) {
+ if (_canAcceptNonLocalWrites.loadRelaxed()) {
return true;
}
if (dbName == kLocalDB) {
@@ -2143,7 +2143,7 @@ void ReplicationCoordinatorImpl::fillIsMasterForReplSet(IsMasterResponse* respon
response->setLastMajorityWrite(majorityOpTime, majorityOpTime.getTimestamp().getSecs());
}
// Report that we are secondary to ismaster callers until drain completes.
- if (response->isMaster() && !_canAcceptNonLocalWrites) {
+ if (response->isMaster() && !_canAcceptNonLocalWrites.loadRelaxed()) {
response->setIsMaster(false);
response->setIsSecondary(true);
}
@@ -2647,7 +2647,7 @@ ReplicationCoordinatorImpl::_updateMemberStateFromTopologyCoordinator_inlock() {
_replicationWaiterList.signalAndRemoveAll_inlock();
// Wake up the optime waiter that is waiting for primary catch-up to finish.
_opTimeWaiterList.signalAndRemoveAll_inlock();
- _canAcceptNonLocalWrites = false;
+ _canAcceptNonLocalWrites.store(false);
_stepDownPending = false;
serverGlobalParams.featureCompatibility.validateFeaturesAsMaster.store(false);
result = kActionCloseAllConnections;
diff --git a/src/mongo/db/repl/replication_coordinator_impl.h b/src/mongo/db/repl/replication_coordinator_impl.h
index c6a21004e6b..74c5dcc7b5f 100644
--- a/src/mongo/db/repl/replication_coordinator_impl.h
+++ b/src/mongo/db/repl/replication_coordinator_impl.h
@@ -1382,7 +1382,7 @@ private:
// Flag that indicates whether writes to databases other than "local" are allowed. Used to
// answer canAcceptWritesForDatabase() and canAcceptWritesFor() questions.
// Always true for standalone nodes and masters in master-slave relationships.
- bool _canAcceptNonLocalWrites; // (GX)
+ AtomicWord<bool> _canAcceptNonLocalWrites; // (GX)
// Flag that indicates whether reads from databases other than "local" are allowed. Unlike
// _canAcceptNonLocalWrites, above, this question is about admission control on secondaries,