From 79d6588c61d60627e015cab590026dc08b0f1c50 Mon Sep 17 00:00:00 2001 From: Vesselina Ratcheva Date: Tue, 9 Jul 2019 18:26:21 -0400 Subject: SERVER-41036 Make ReadWriteAbility::_canAcceptNonLocalWrites an AtomicWord (cherry picked from commit 21746d3302f37a9d5716c2f249b99d7f0e273344) --- src/mongo/db/repl/replication_coordinator_impl.cpp | 10 +++++----- src/mongo/db/repl/replication_coordinator_impl.h | 2 +- 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 _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, -- cgit v1.2.1