summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Polato <paolo.polato@mongodb.com>2022-12-19 14:54:21 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-12-19 15:26:18 +0000
commite86b8c099ecf56fab4913d3fb94a8482953d08d4 (patch)
treeddd626b8fdbbefa0a9ef81bcff0cae032d9c851d
parentf037f034bb407ab6fe61db4c95144dc4856cf0b0 (diff)
downloadmongo-e86b8c099ecf56fab4913d3fb94a8482953d08d4.tar.gz
SERVER-72065 Fix refresh of sessions cache in CSRS secondary nodes
-rw-r--r--src/mongo/db/s/sessions_collection_config_server.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/mongo/db/s/sessions_collection_config_server.cpp b/src/mongo/db/s/sessions_collection_config_server.cpp
index 1cf0d58e7f6..ec004897ff4 100644
--- a/src/mongo/db/s/sessions_collection_config_server.cpp
+++ b/src/mongo/db/s/sessions_collection_config_server.cpp
@@ -28,6 +28,7 @@
*/
#include "mongo/db/s/sessions_collection_config_server.h"
+#include "mongo/db/repl/replication_coordinator.h"
#include "mongo/logv2/log.h"
#include "mongo/s/chunk_constraints.h"
@@ -118,20 +119,25 @@ void SessionsCollectionConfigServer::setupSessionsCollection(OperationContext* o
_shardCollectionIfNeeded(opCtx);
_generateIndexesIfNeeded(opCtx);
- auto filterQuery =
- BSON("_id" << NamespaceString::kLogicalSessionsNamespace.ns()
- << CollectionType::kMaxChunkSizeBytesFieldName << BSON("$exists" << false));
- auto updateQuery = BSON("$set" << BSON(CollectionType::kMaxChunkSizeBytesFieldName
- << logical_sessions::kMaxChunkSizeBytes
- << CollectionType::kNoAutoSplitFieldName << true));
-
- uassertStatusOK(Grid::get(opCtx)->catalogClient()->updateConfigDocument(
- opCtx,
- CollectionType::ConfigNS,
- filterQuery,
- updateQuery,
- false,
- ShardingCatalogClient::kMajorityWriteConcern));
+
+ Lock::GlobalLock lock(opCtx, MODE_IX);
+ if (const auto replCoord = repl::ReplicationCoordinator::get(opCtx);
+ replCoord->canAcceptWritesFor(opCtx, CollectionType::ConfigNS)) {
+ auto filterQuery =
+ BSON("_id" << NamespaceString::kLogicalSessionsNamespace.ns()
+ << CollectionType::kMaxChunkSizeBytesFieldName << BSON("$exists" << false));
+ auto updateQuery = BSON("$set" << BSON(CollectionType::kMaxChunkSizeBytesFieldName
+ << logical_sessions::kMaxChunkSizeBytes
+ << CollectionType::kNoAutoSplitFieldName << true));
+
+ uassertStatusOK(Grid::get(opCtx)->catalogClient()->updateConfigDocument(
+ opCtx,
+ CollectionType::ConfigNS,
+ filterQuery,
+ updateQuery,
+ false,
+ ShardingCatalogClient::kLocalWriteConcern));
+ }
}
} // namespace mongo