From 43c5e7d26928b45ed4b44d81ed33e46682db58b2 Mon Sep 17 00:00:00 2001 From: Paolo Polato Date: Wed, 14 Dec 2022 08:32:53 +0000 Subject: SERVER-72065 Fix refresh of sessions cache in CSRS secondary nodes --- src/mongo/db/s/SConscript | 1 + .../db/s/sessions_collection_config_server.cpp | 35 +++++++++++++--------- 2 files changed, 22 insertions(+), 14 deletions(-) (limited to 'src/mongo/db/s') diff --git a/src/mongo/db/s/SConscript b/src/mongo/db/s/SConscript index f2e6e4e4e84..6bf33492fad 100644 --- a/src/mongo/db/s/SConscript +++ b/src/mongo/db/s/SConscript @@ -598,6 +598,7 @@ env.Library( LIBDEPS_PRIVATE=[ '$BUILD_DIR/mongo/db/dbdirectclient', '$BUILD_DIR/mongo/db/pipeline/sharded_agg_helpers', + '$BUILD_DIR/mongo/db/shard_role', '$BUILD_DIR/mongo/s/sessions_collection_sharded', '$BUILD_DIR/mongo/s/sharding_api', ], diff --git a/src/mongo/db/s/sessions_collection_config_server.cpp b/src/mongo/db/s/sessions_collection_config_server.cpp index 1f5e5353a62..2e4d040f2d4 100644 --- a/src/mongo/db/s/sessions_collection_config_server.cpp +++ b/src/mongo/db/s/sessions_collection_config_server.cpp @@ -28,6 +28,8 @@ */ #include "mongo/db/s/sessions_collection_config_server.h" +#include "mongo/db/catalog_raii.h" +#include "mongo/db/repl/replication_coordinator.h" #include "mongo/logv2/log.h" #include "mongo/s/chunk_constraints.h" @@ -118,20 +120,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)); + + AutoGetCollection autoColl(opCtx, NamespaceString::kLogicalSessionsNamespace, MODE_IS); + if (const auto replCoord = repl::ReplicationCoordinator::get(opCtx); + replCoord->canAcceptWritesFor(opCtx, NamespaceString::kLogicalSessionsNamespace)) { + 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 -- cgit v1.2.1