summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorMatthew Russotto <matthew.russotto@mongodb.com>2023-04-07 12:14:07 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-11 23:13:13 +0000
commit1f837f20fd52ecc5e2704a59313c14bf06784202 (patch)
tree6917c63d4a5a63bf2ed8c13a7018a6101f69d96d /src/mongo
parent250d7a062930d8f397ca6d76b1e3d41d2c5d4222 (diff)
downloadmongo-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.cpp9
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()) {