diff options
author | Paolo Polato <paolo.polato@mongodb.com> | 2022-12-19 14:54:21 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-12-19 15:26:18 +0000 |
commit | e86b8c099ecf56fab4913d3fb94a8482953d08d4 (patch) | |
tree | ddd626b8fdbbefa0a9ef81bcff0cae032d9c851d | |
parent | f037f034bb407ab6fe61db4c95144dc4856cf0b0 (diff) | |
download | mongo-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.cpp | 34 |
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 |