summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/shard_filtering_metadata_refresh.cpp
diff options
context:
space:
mode:
authorDaniel Gómez Ferro <daniel.gomezferro@mongodb.com>2023-01-03 14:56:58 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-01-03 15:57:28 +0000
commit6ec1e03c0968d786f62cad9db47408411301e7af (patch)
treec132befa4b39659a443be5d010fe9a7cb3eb70ce /src/mongo/db/s/shard_filtering_metadata_refresh.cpp
parent1f7860fb48efaf3b47ec63cd01da8b540c06a5b0 (diff)
downloadmongo-6ec1e03c0968d786f62cad9db47408411301e7af.tar.gz
SERVER-69770 Enforce lock mode in CollectionShardingRuntime API
Diffstat (limited to 'src/mongo/db/s/shard_filtering_metadata_refresh.cpp')
-rw-r--r--src/mongo/db/s/shard_filtering_metadata_refresh.cpp41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/mongo/db/s/shard_filtering_metadata_refresh.cpp b/src/mongo/db/s/shard_filtering_metadata_refresh.cpp
index dbcc1426416..90dacb0095f 100644
--- a/src/mongo/db/s/shard_filtering_metadata_refresh.cpp
+++ b/src/mongo/db/s/shard_filtering_metadata_refresh.cpp
@@ -319,11 +319,11 @@ void onDbVersionMismatch(OperationContext* opCtx,
* Returns 'true' if there were concurrent operations that had to be joined (in which case all locks
* will be dropped). If there were none, returns false and the locks continue to be held.
*/
-bool joinCollectionPlacementVersionOperation(
- OperationContext* opCtx,
- boost::optional<Lock::DBLock>* dbLock,
- boost::optional<Lock::CollectionLock>* collLock,
- boost::optional<CollectionShardingRuntime::ScopedCollectionShardingRuntime>* scopedCsr) {
+template <typename ScopedCSR>
+bool joinCollectionPlacementVersionOperation(OperationContext* opCtx,
+ boost::optional<Lock::DBLock>* dbLock,
+ boost::optional<Lock::CollectionLock>* collLock,
+ boost::optional<ScopedCSR>* scopedCsr) {
invariant(dbLock->has_value());
invariant(collLock->has_value());
invariant(scopedCsr->has_value());
@@ -393,8 +393,9 @@ SharedSemiFuture<void> recoverRefreshCollectionPlacementVersion(
Lock::DBLock dbLock(opCtx, nss.dbName(), MODE_IX);
Lock::CollectionLock collLock(opCtx, nss, MODE_IX);
- auto scopedCsr = CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kExclusive);
+ auto scopedCsr =
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireExclusive(opCtx,
+ nss);
// cancellationToken needs to be checked under the CSR lock before overwriting the
// filtering metadata to serialize with other threads calling
@@ -425,8 +426,8 @@ SharedSemiFuture<void> recoverRefreshCollectionPlacementVersion(
Lock::CollectionLock collLock(opCtx, nss, MODE_IS);
auto scopedCsr =
- CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kShared);
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireShared(opCtx,
+ nss);
if (auto msm = MigrationSourceManager::get(*scopedCsr)) {
waitForMigrationAbort.emplace(msm->abort());
@@ -502,9 +503,8 @@ void onCollectionPlacementVersionMismatch(OperationContext* opCtx,
collLock.emplace(opCtx, nss, MODE_IS);
if (chunkVersionReceived) {
- boost::optional<CollectionShardingRuntime::ScopedCollectionShardingRuntime>
- scopedCsr = CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kShared);
+ auto scopedCsr = boost::make_optional(
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireShared(opCtx, nss));
if (joinCollectionPlacementVersionOperation(
opCtx, &dbLock, &collLock, &scopedCsr)) {
@@ -522,9 +522,8 @@ void onCollectionPlacementVersionMismatch(OperationContext* opCtx,
}
}
- boost::optional<CollectionShardingRuntime::ScopedCollectionShardingRuntime> scopedCsr =
- CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kExclusive);
+ auto scopedCsr = boost::make_optional(
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireExclusive(opCtx, nss));
if (joinCollectionPlacementVersionOperation(opCtx, &dbLock, &collLock, &scopedCsr)) {
continue;
@@ -624,8 +623,8 @@ ChunkVersion forceShardFilteringMetadataRefresh(OperationContext* opCtx,
// is in the 'system.views' collection.
Lock::DBLock dbLock(opCtx, nss.dbName(), MODE_IX);
Lock::CollectionLock collLock(opCtx, nss, MODE_IX);
- auto scopedCsr = CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kExclusive);
+ auto scopedCsr =
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireExclusive(opCtx, nss);
scopedCsr->setFilteringMetadata(opCtx, CollectionMetadata());
return ChunkVersion::UNSHARDED();
@@ -639,8 +638,8 @@ ChunkVersion forceShardFilteringMetadataRefresh(OperationContext* opCtx,
// is in the 'system.views' collection.
Lock::DBLock dbLock(opCtx, nss.dbName(), MODE_IS);
Lock::CollectionLock collLock(opCtx, nss, MODE_IS);
- auto scopedCsr = CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kShared);
+ auto scopedCsr =
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireShared(opCtx, nss);
if (auto optMetadata = scopedCsr->getCurrentMetadataIfKnown()) {
const auto& metadata = *optMetadata;
if (metadata.isSharded() &&
@@ -663,8 +662,8 @@ ChunkVersion forceShardFilteringMetadataRefresh(OperationContext* opCtx,
// 'system.views' collection.
Lock::DBLock dbLock(opCtx, nss.dbName(), MODE_IX);
Lock::CollectionLock collLock(opCtx, nss, MODE_IX);
- auto scopedCsr = CollectionShardingRuntime::assertCollectionLockedAndAcquire(
- opCtx, nss, CSRAcquisitionMode::kExclusive);
+ auto scopedCsr =
+ CollectionShardingRuntime::assertCollectionLockedAndAcquireExclusive(opCtx, nss);
if (auto optMetadata = scopedCsr->getCurrentMetadataIfKnown()) {
const auto& metadata = *optMetadata;
if (metadata.isSharded() &&