diff options
author | Matthew Russotto <matthew.russotto@mongodb.com> | 2023-04-07 12:14:07 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-04-11 23:13:13 +0000 |
commit | 1f837f20fd52ecc5e2704a59313c14bf06784202 (patch) | |
tree | 6917c63d4a5a63bf2ed8c13a7018a6101f69d96d /src/mongo | |
parent | 250d7a062930d8f397ca6d76b1e3d41d2c5d4222 (diff) | |
download | mongo-1f837f20fd52ecc5e2704a59313c14bf06784202.tar.gz |
SERVER-75842 Make sure to access _rsConfigState under lock. Fix test to cover all uninitalized conditions
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/repl/replication_coordinator_impl.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mongo/db/repl/replication_coordinator_impl.cpp b/src/mongo/db/repl/replication_coordinator_impl.cpp index 2884dbc70e8..cc659d97131 100644 --- a/src/mongo/db/repl/replication_coordinator_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_impl.cpp @@ -1650,9 +1650,14 @@ Status ReplicationCoordinatorImpl::waitUntilOpTimeForReadUntil(OperationContext* "node needs to be a replica set member to use read concern"}; } - if (_rsConfigState == kConfigUninitialized || _rsConfigState == kConfigInitiating) { - return {ErrorCodes::NotYetInitialized, + { + stdx::lock_guard lock(_mutex); + if (_rsConfigState == kConfigUninitialized || _rsConfigState == kConfigInitiating || + (_rsConfigState == kConfigHBReconfiguring && !_rsConfig.isInitialized())) { + return { + ErrorCodes::NotYetInitialized, "Cannot use non-local read concern until replica set is finished initializing."}; + } } if (readConcern.getArgsAfterClusterTime() || readConcern.getArgsAtClusterTime()) { |