summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp')
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
index fb34606a968..aafe803ef45 100644
--- a/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
+++ b/src/mongo/db/s/config/sharding_catalog_manager_collection_operations.cpp
@@ -609,7 +609,11 @@ void ShardingCatalogManager::configureCollectionBalancing(
return;
}
- const auto cm = Grid::get(opCtx)->catalogCache()->getShardedCollectionRoutingInfo(opCtx, nss);
+ // Take _kChunkOpLock in exclusive mode to prevent concurrent chunk splits, merges, and
+ // migrations
+ Lock::ExclusiveLock lk(opCtx, opCtx->lockState(), _kChunkOpLock);
+ const auto cm = uassertStatusOK(
+ Grid::get(opCtx)->catalogCache()->getShardedCollectionRoutingInfoWithRefresh(opCtx, nss));
const auto uuid = cm.getUUID();
std::set<ShardId> shardsIds;
@@ -639,7 +643,6 @@ void ShardingCatalogManager::configureCollectionBalancing(
bumpCollectionMinorVersionInTxn(opCtx, nss, txnNumber);
});
-
const auto executor = Grid::get(opCtx)->getExecutorPool()->getFixedExecutor();
sharding_util::tellShardsToRefreshCollection(
opCtx,