summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFaustoleyva54 <fausto.leyva@mongodb.com>2022-09-15 15:43:58 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-09-15 18:38:41 +0000
commit881ad6801b77be9529baf34f421d05f5a7ccaca4 (patch)
tree2c19b1d8d7f85f50cf8d399e461af5f51e3c56b2
parentd1a117a1abc9ead34fc6399697055a46ca0c1df4 (diff)
downloadmongo-881ad6801b77be9529baf34f421d05f5a7ccaca4.tar.gz
SERVER-68336 Add version of AutoGetCollection which takes a struct for its optional parameters
-rw-r--r--src/mongo/db/catalog/coll_mod.cpp6
-rw-r--r--src/mongo/db/catalog/create_collection.cpp6
-rw-r--r--src/mongo/db/catalog/database_test.cpp4
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp4
-rw-r--r--src/mongo/db/catalog_raii.cpp56
-rw-r--r--src/mongo/db/catalog_raii.h58
-rw-r--r--src/mongo/db/catalog_raii_test.cpp84
-rw-r--r--src/mongo/db/commands/count_cmd.cpp4
-rw-r--r--src/mongo/db/commands/dbcheck.cpp7
-rw-r--r--src/mongo/db/commands/distinct.cpp4
-rw-r--r--src/mongo/db/commands/find_cmd.cpp4
-rw-r--r--src/mongo/db/commands/getmore_cmd.cpp5
-rw-r--r--src/mongo/db/commands/map_reduce_agg.cpp2
-rw-r--r--src/mongo/db/commands/run_aggregate.cpp6
-rw-r--r--src/mongo/db/commands/validate_db_metadata_cmd.cpp7
-rw-r--r--src/mongo/db/db_raii.cpp64
-rw-r--r--src/mongo/db/db_raii.h45
-rw-r--r--src/mongo/db/db_raii_multi_collection_test.cpp61
-rw-r--r--src/mongo/db/db_raii_test.cpp32
-rw-r--r--src/mongo/db/pipeline/document_source_cursor.cpp18
-rw-r--r--src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp4
-rw-r--r--src/mongo/db/query/cqf_get_executor.cpp2
-rw-r--r--src/mongo/db/s/collection_sharding_runtime.cpp12
-rw-r--r--src/mongo/db/s/collmod_coordinator.cpp7
-rw-r--r--src/mongo/db/s/create_collection_coordinator.cpp9
-rw-r--r--src/mongo/db/s/drop_collection_coordinator.cpp7
-rw-r--r--src/mongo/db/s/flush_routing_table_cache_updates_command.cpp7
-rw-r--r--src/mongo/db/s/get_shard_version_command.cpp6
-rw-r--r--src/mongo/db/s/migration_source_manager.cpp6
-rw-r--r--src/mongo/db/s/refine_collection_shard_key_coordinator.cpp7
-rw-r--r--src/mongo/db/s/rename_collection_coordinator.cpp7
-rw-r--r--src/mongo/db/s/reshard_collection_coordinator.cpp7
-rw-r--r--src/mongo/db/s/resharding/resharding_oplog_application.cpp34
-rw-r--r--src/mongo/db/s/shard_key_util.cpp6
-rw-r--r--src/mongo/db/s/shard_server_op_observer.cpp46
-rw-r--r--src/mongo/db/s/sharding_ddl_util.cpp5
-rw-r--r--src/mongo/db/stats/storage_stats.cpp2
37 files changed, 351 insertions, 300 deletions
diff --git a/src/mongo/db/catalog/coll_mod.cpp b/src/mongo/db/catalog/coll_mod.cpp
index a0e073bb098..92dce59316a 100644
--- a/src/mongo/db/catalog/coll_mod.cpp
+++ b/src/mongo/db/catalog/coll_mod.cpp
@@ -700,7 +700,11 @@ Status _collModInternal(OperationContext* opCtx,
return cmd.getIndex() && cmd.getIndex()->getUnique().value_or(false) && !mode;
});
- AutoGetCollection coll(opCtx, nsOrUUID, MODE_X, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection coll(
+ opCtx,
+ nsOrUUID,
+ MODE_X,
+ AutoGetCollection::Options{}.viewMode(auto_get_collection::ViewMode::kViewsPermitted));
auto nss = coll.getNss();
StringData dbName = nss.db();
Lock::CollectionLock systemViewsLock(
diff --git a/src/mongo/db/catalog/create_collection.cpp b/src/mongo/db/catalog/create_collection.cpp
index f157f2e62c6..3fe61d50d3f 100644
--- a/src/mongo/db/catalog/create_collection.cpp
+++ b/src/mongo/db/catalog/create_collection.cpp
@@ -416,7 +416,11 @@ Status _createTimeseries(OperationContext* opCtx,
return ret;
ret = writeConflictRetry(opCtx, "create", ns.ns(), [&]() -> Status {
- AutoGetCollection autoColl(opCtx, ns, MODE_IX, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection autoColl(
+ opCtx,
+ ns,
+ MODE_IX,
+ AutoGetCollection::Options{}.viewMode(auto_get_collection::ViewMode::kViewsPermitted));
Lock::CollectionLock systemDotViewsLock(
opCtx,
NamespaceString(ns.db(), NamespaceString::kSystemDotViewsCollectionName),
diff --git a/src/mongo/db/catalog/database_test.cpp b/src/mongo/db/catalog/database_test.cpp
index 0b0200a7bf9..4a2d94e8935 100644
--- a/src/mongo/db/catalog/database_test.cpp
+++ b/src/mongo/db/catalog/database_test.cpp
@@ -443,7 +443,7 @@ TEST_F(DatabaseTest, AutoGetCollectionForReadCommandSucceedsWithDeadlineNow) {
ASSERT(_opCtx.get()->lockState()->isCollectionLockedForMode(nss, MODE_X));
try {
AutoGetCollectionForReadCommand db(
- _opCtx.get(), nss, AutoGetCollectionViewMode::kViewsForbidden, Date_t::now());
+ _opCtx.get(), nss, auto_get_collection::ViewMode::kViewsForbidden, Date_t::now());
} catch (const ExceptionFor<ErrorCodes::LockTimeout>&) {
FAIL("Should get the db within the timeout");
}
@@ -457,7 +457,7 @@ TEST_F(DatabaseTest, AutoGetCollectionForReadCommandSucceedsWithDeadlineMin) {
ASSERT(_opCtx.get()->lockState()->isCollectionLockedForMode(nss, MODE_X));
try {
AutoGetCollectionForReadCommand db(
- _opCtx.get(), nss, AutoGetCollectionViewMode::kViewsForbidden, Date_t());
+ _opCtx.get(), nss, auto_get_collection::ViewMode::kViewsForbidden, Date_t());
} catch (const ExceptionFor<ErrorCodes::LockTimeout>&) {
FAIL("Should get the db within the timeout");
}
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp
index 8d7e315cb25..eaeca865775 100644
--- a/src/mongo/db/catalog/rename_collection.cpp
+++ b/src/mongo/db/catalog/rename_collection.cpp
@@ -958,7 +958,9 @@ Status renameCollectionForApplyOps(OperationContext* opCtx,
// Take global IX lock explicitly to avoid upgrading from IS later
Lock::GlobalLock globalLock(opCtx, MODE_IX);
AutoGetCollectionForRead sourceColl(
- opCtx, sourceNss, AutoGetCollectionViewMode::kViewsPermitted);
+ opCtx,
+ sourceNss,
+ AutoGetCollection::Options{}.viewMode(auto_get_collection::ViewMode::kViewsPermitted));
if (sourceNss.isDropPendingNamespace() || !sourceColl) {
boost::optional<NamespaceString> dropTargetNss;
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp
index a02ae9838cc..3197c370cea 100644
--- a/src/mongo/db/catalog_raii.cpp
+++ b/src/mongo/db/catalog_raii.cpp
@@ -195,13 +195,15 @@ Database* AutoGetDb::ensureDbExists(OperationContext* opCtx) {
return _db;
}
-AutoGetCollection::AutoGetCollection(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- LockMode modeColl,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs) {
+AutoGetCollection::AutoGetCollection(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ LockMode modeColl,
+ Options options) {
+
+ auto& viewMode = options._viewMode;
+ auto& deadline = options._deadline;
+ auto& secondaryNssOrUUIDs = options._secondaryNssOrUUIDs;
+
invariant(!opCtx->isLockFreeReadsOp());
// Acquire the global/RSTL and all the database locks (may or may not be multiple
@@ -284,12 +286,12 @@ AutoGetCollection::AutoGetCollection(
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Taking " << _resolvedNss.ns()
<< " lock for timeseries is not allowed",
- viewMode == AutoGetCollectionViewMode::kViewsPermitted || !_view->timeseries());
+ viewMode == auto_get_collection::ViewMode::kViewsPermitted || !_view->timeseries());
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Namespace " << _resolvedNss.ns()
<< " is a view, not a collection",
- viewMode == AutoGetCollectionViewMode::kViewsPermitted);
+ viewMode == auto_get_collection::ViewMode::kViewsPermitted);
uassert(StaleConfigInfo(_resolvedNss,
*receivedShardVersion,
@@ -357,11 +359,15 @@ Collection* AutoGetCollection::getWritableCollection(OperationContext* opCtx) {
AutoGetCollectionLockFree::AutoGetCollectionLockFree(OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
RestoreFromYieldFn restoreFromYield,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline)
+ Options options)
: _lockFreeReadsBlock(opCtx),
- _globalLock(
- opCtx, MODE_IS, deadline, Lock::InterruptBehavior::kThrow, true /* skipRSTLLock */) {
+ _globalLock(opCtx,
+ MODE_IS,
+ options._deadline,
+ Lock::InterruptBehavior::kThrow,
+ true /* skipRSTLLock */) {
+
+ auto& viewMode = options._viewMode;
// Wait for a configured amount of time after acquiring locks if the failpoint is enabled
setAutoGetCollectionWait.execute(
@@ -409,13 +415,14 @@ AutoGetCollectionLockFree::AutoGetCollectionLockFree(OperationContext* opCtx,
}
_view = catalog->lookupView(opCtx, _resolvedNss);
- uassert(
- ErrorCodes::CommandNotSupportedOnView,
- str::stream() << "Taking " << _resolvedNss.ns() << " lock for timeseries is not allowed",
- !_view || viewMode == AutoGetCollectionViewMode::kViewsPermitted || !_view->timeseries());
+ uassert(ErrorCodes::CommandNotSupportedOnView,
+ str::stream() << "Taking " << _resolvedNss.ns()
+ << " lock for timeseries is not allowed",
+ !_view || viewMode == auto_get_collection::ViewMode::kViewsPermitted ||
+ !_view->timeseries());
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Namespace " << _resolvedNss.ns() << " is a view, not a collection",
- !_view || viewMode == AutoGetCollectionViewMode::kViewsPermitted);
+ !_view || viewMode == auto_get_collection::ViewMode::kViewsPermitted);
if (_view) {
// We are about to succeed setup as a view. No LockFree state was setup so do not mark the
// OperationContext as LFR.
@@ -427,7 +434,7 @@ AutoGetCollectionMaybeLockFree::AutoGetCollectionMaybeLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
LockMode modeColl,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline) {
if (opCtx->isLockFreeReadsOp()) {
_autoGetLockFree.emplace(
@@ -438,10 +445,12 @@ AutoGetCollectionMaybeLockFree::AutoGetCollectionMaybeLockFree(
"This is a nested lock helper and there was an attempt to "
"yield locks, which should be impossible");
},
- viewMode,
- deadline);
+ AutoGetCollectionLockFree::Options{}.viewMode(viewMode).deadline(deadline));
} else {
- _autoGet.emplace(opCtx, nsOrUUID, modeColl, viewMode, deadline);
+ _autoGet.emplace(opCtx,
+ nsOrUUID,
+ modeColl,
+ AutoGetCollection::Options{}.viewMode(viewMode).deadline(deadline));
}
}
@@ -591,8 +600,7 @@ AutoGetChangeCollection::AutoGetChangeCollection(OperationContext* opCtx,
_coll.emplace(opCtx,
NamespaceString::makeChangeCollectionNSS(tenantId),
mode == AccessMode::kRead ? MODE_IS : MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- deadline);
+ AutoGetCollection::Options{}.deadline(deadline));
}
const Collection* AutoGetChangeCollection::operator->() const {
diff --git a/src/mongo/db/catalog_raii.h b/src/mongo/db/catalog_raii.h
index 3535cb1adc2..6eed6afd845 100644
--- a/src/mongo/db/catalog_raii.h
+++ b/src/mongo/db/catalog_raii.h
@@ -90,7 +90,36 @@ private:
std::vector<Lock::DBLock> _secondaryDbLocks;
};
-enum class AutoGetCollectionViewMode { kViewsPermitted, kViewsForbidden };
+namespace auto_get_collection {
+enum class ViewMode { kViewsPermitted, kViewsForbidden };
+
+template <typename T>
+struct OptionsBase {
+ T viewMode(ViewMode viewMode) {
+ _viewMode = viewMode;
+ return std::move(*static_cast<T*>(this));
+ }
+
+ T deadline(Date_t deadline) {
+ _deadline = std::move(deadline);
+ return std::move(*static_cast<T*>(this));
+ }
+
+ ViewMode _viewMode = ViewMode::kViewsForbidden;
+ Date_t _deadline = Date_t::max();
+};
+
+struct Options : OptionsBase<Options> {};
+struct OptionsWithSecondaryCollections : OptionsBase<OptionsWithSecondaryCollections> {
+ OptionsWithSecondaryCollections secondaryNssOrUUIDs(
+ std::vector<NamespaceStringOrUUID> secondaryNssOrUUIDs) {
+ _secondaryNssOrUUIDs = std::move(secondaryNssOrUUIDs);
+ return std::move(*this);
+ }
+
+ std::vector<NamespaceStringOrUUID> _secondaryNssOrUUIDs;
+};
+} // namespace auto_get_collection
/**
* RAII-style class, which acquires global, database, and collection locks according to the chart
@@ -113,6 +142,8 @@ class AutoGetCollection {
AutoGetCollection& operator=(const AutoGetCollection&) = delete;
public:
+ using Options = auto_get_collection::OptionsWithSecondaryCollections;
+
/**
* Collection locks are also acquired for any 'secondaryNssOrUUIDs' namespaces provided.
* Collection locks are acquired in ascending ResourceId(RESOURCE_COLLECTION, nss) order to
@@ -123,13 +154,10 @@ public:
* 'nsOrUUID' to be duplicated in 'secondaryNssOrUUIDs', or 'secondaryNssOrUUIDs' to contain
* duplicates.
*/
- AutoGetCollection(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- LockMode modeColl,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
- Date_t deadline = Date_t::max(),
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
+ AutoGetCollection(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ LockMode modeColl,
+ Options options = {});
explicit operator bool() const {
return static_cast<bool>(getCollection());
@@ -233,16 +261,16 @@ public:
using RestoreFromYieldFn =
std::function<void(std::shared_ptr<const Collection>&, OperationContext*, UUID)>;
+ using Options = auto_get_collection::Options;
+
/**
* Used by AutoGetCollectionForReadLockFree where it provides implementation for restore after
* yield.
*/
- AutoGetCollectionLockFree(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- RestoreFromYieldFn restoreFromYield,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
- Date_t deadline = Date_t::max());
+ AutoGetCollectionLockFree(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ RestoreFromYieldFn restoreFromYield,
+ Options options = {});
explicit operator bool() const {
// Use the CollectionPtr because it is updated if it yields whereas _collection is not until
@@ -324,7 +352,7 @@ public:
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
LockMode modeColl,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode viewMode = auto_get_collection::ViewMode::kViewsForbidden,
Date_t deadline = Date_t::max());
private:
diff --git a/src/mongo/db/catalog_raii_test.cpp b/src/mongo/db/catalog_raii_test.cpp
index 645aa903837..c909488b192 100644
--- a/src/mongo/db/catalog_raii_test.cpp
+++ b/src/mongo/db/catalog_raii_test.cpp
@@ -130,11 +130,11 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionCollLockDeadline) {
ASSERT(client1.second->lockState()->isCollectionLockedForMode(nss, MODE_X));
failsWithLockTimeout(
[&] {
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollection coll(
+ client2.second.get(),
+ nss,
+ MODE_X,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -144,11 +144,11 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionDBLockDeadline) {
ASSERT(client1.second->lockState()->isDbLockedForMode(nss.dbName(), MODE_X));
failsWithLockTimeout(
[&] {
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollection coll(
+ client2.second.get(),
+ nss,
+ MODE_X,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -158,11 +158,11 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionGlobalLockDeadline) {
ASSERT(client1.second->lockState()->isLocked());
failsWithLockTimeout(
[&] {
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollection coll(
+ client2.second.get(),
+ nss,
+ MODE_X,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -178,8 +178,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionDeadlineNow) {
AutoGetCollection coll(client2.second.get(),
nss,
MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now());
+ AutoGetCollection::Options{}.deadline(Date_t::now()));
},
Milliseconds(0));
}
@@ -192,11 +191,8 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionDeadlineMin) {
failsWithLockTimeout(
[&] {
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t());
+ AutoGetCollection coll(
+ client2.second.get(), nss, MODE_X, AutoGetCollection::Options{}.deadline(Date_t()));
},
Milliseconds(0));
}
@@ -207,11 +203,11 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionNotCompatibleWithRSTLExclusiveLo
failsWithLockTimeout(
[&] {
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollection coll(
+ client2.second.get(),
+ nss,
+ MODE_IX,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -234,9 +230,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionSecondaryNamespacesSingleDb) {
autoGetColl.emplace(opCtx1,
nss,
MODE_IS,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNamespaces);
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNamespaces));
ASSERT(opCtx1->lockState()->isRSTLLocked());
ASSERT(opCtx1->lockState()->isReadLocked()); // Global lock check
@@ -272,9 +266,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNamespacesMODEIX) {
autoGetColl.emplace(opCtx1,
nss,
MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNamespaces);
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNamespaces));
ASSERT(opCtx1->lockState()->isRSTLLocked());
ASSERT(opCtx1->lockState()->isWriteLocked()); // Global lock check
@@ -337,9 +329,9 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNssCollLockDeadline) {
AutoGetCollection coll(client2.second.get(),
nss,
MODE_IS,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs,
- secondaryNamespacesConflict);
+ AutoGetCollection::Options{}
+ .deadline(Date_t::now() + timeoutMs)
+ .secondaryNssOrUUIDs(secondaryNamespacesConflict));
},
timeoutMs);
@@ -350,19 +342,18 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionMultiNssCollLockDeadline) {
AutoGetCollection collNoConflict(client2.second.get(),
nss,
MODE_IS,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs,
- secondaryNamespacesNoConflict);
+ AutoGetCollection::Options{}
+ .deadline(Date_t::now() + timeoutMs)
+ .secondaryNssOrUUIDs(secondaryNamespacesNoConflict));
}
// Now without the MODE_X lock on kSecondaryNss1, should work fine.
autoGetCollWithXLock.reset();
- AutoGetCollection coll(client2.second.get(),
- nss,
- MODE_IS,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNamespacesConflict);
+ AutoGetCollection coll(
+ client2.second.get(),
+ nss,
+ MODE_IS,
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNamespacesConflict));
}
TEST_F(CatalogRAIITestFixture, AutoGetCollectionLockFreeGlobalLockDeadline) {
@@ -374,8 +365,7 @@ TEST_F(CatalogRAIITestFixture, AutoGetCollectionLockFreeGlobalLockDeadline) {
client2.second.get(),
nss,
[](std::shared_ptr<const Collection>&, OperationContext*, UUID) {},
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollectionLockFree::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
diff --git a/src/mongo/db/commands/count_cmd.cpp b/src/mongo/db/commands/count_cmd.cpp
index 5eeffc217b4..522df5047e6 100644
--- a/src/mongo/db/commands/count_cmd.cpp
+++ b/src/mongo/db/commands/count_cmd.cpp
@@ -156,7 +156,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsCollectionRequired(dbName, cmdObj),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto nss = ctx->getNss();
CountCommandRequest request(NamespaceStringOrUUID(NamespaceString{}));
@@ -237,7 +237,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsOrUUID(dbName, cmdObj),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto& nss = ctx->getNss();
CurOpFailpointHelpers::waitWhileFailPointEnabled(
diff --git a/src/mongo/db/commands/dbcheck.cpp b/src/mongo/db/commands/dbcheck.cpp
index a27c4e6a141..9eaa51fe1b6 100644
--- a/src/mongo/db/commands/dbcheck.cpp
+++ b/src/mongo/db/commands/dbcheck.cpp
@@ -509,11 +509,8 @@ private:
auto const lockDeadline = Date_t::now() + timeoutMs;
timeoutMs *= 2;
- AutoGetCollection agc(opCtx,
- info.nss,
- lockMode,
- AutoGetCollectionViewMode::kViewsForbidden,
- lockDeadline);
+ AutoGetCollection agc(
+ opCtx, info.nss, lockMode, AutoGetCollection::Options{}.deadline(lockDeadline));
if (_stepdownHasOccurred(opCtx, info.nss)) {
_done = true;
diff --git a/src/mongo/db/commands/distinct.cpp b/src/mongo/db/commands/distinct.cpp
index 542f4e773b6..1895281af59 100644
--- a/src/mongo/db/commands/distinct.cpp
+++ b/src/mongo/db/commands/distinct.cpp
@@ -154,7 +154,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsCollectionRequired(dbName, cmdObj),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto nss = ctx->getNss();
const ExtensionsCallbackReal extensionsCallback(opCtx, &nss);
@@ -208,7 +208,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsOrUUID(dbName, cmdObj),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto& nss = ctx->getNss();
if (!ctx->getView()) {
diff --git a/src/mongo/db/commands/find_cmd.cpp b/src/mongo/db/commands/find_cmd.cpp
index ba45ad6b615..c3d62936a84 100644
--- a/src/mongo/db/commands/find_cmd.cpp
+++ b/src/mongo/db/commands/find_cmd.cpp
@@ -288,7 +288,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsCollectionRequired(_dbName, _request.body),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto nss = ctx->getNss();
// Going forward this operation must never ignore interrupt signals while waiting for
@@ -473,7 +473,7 @@ public:
boost::optional<AutoGetCollectionForReadCommandMaybeLockFree> ctx;
ctx.emplace(opCtx,
CommandHelpers::parseNsOrUUID(_dbName, _request.body),
- AutoGetCollectionViewMode::kViewsPermitted);
+ auto_get_collection::ViewMode::kViewsPermitted);
const auto& nss = ctx->getNss();
// Going forward this operation must never ignore interrupt signals while waiting for
diff --git a/src/mongo/db/commands/getmore_cmd.cpp b/src/mongo/db/commands/getmore_cmd.cpp
index 7ea168e4ade..17edcdd837c 100644
--- a/src/mongo/db/commands/getmore_cmd.cpp
+++ b/src/mongo/db/commands/getmore_cmd.cpp
@@ -517,9 +517,8 @@ public:
// cursor's executor when constructing 'readLock'.
readLock.emplace(opCtx,
cursorPin->getExecutor()->nss(),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- cursorPin->getExecutor()->getSecondaryNamespaces());
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(
+ cursorPin->getExecutor()->getSecondaryNamespaces()));
statsTracker.emplace(
opCtx,
diff --git a/src/mongo/db/commands/map_reduce_agg.cpp b/src/mongo/db/commands/map_reduce_agg.cpp
index 1f31ec3c78f..73560f2b1c3 100644
--- a/src/mongo/db/commands/map_reduce_agg.cpp
+++ b/src/mongo/db/commands/map_reduce_agg.cpp
@@ -69,7 +69,7 @@ auto makeExpressionContext(OperationContext* opCtx,
// AutoGetCollectionForReadCommand will throw if the sharding version for this connection is
// out of date.
AutoGetCollectionForReadCommandMaybeLockFree ctx(
- opCtx, parsedMr.getNamespace(), AutoGetCollectionViewMode::kViewsPermitted);
+ opCtx, parsedMr.getNamespace(), auto_get_collection::ViewMode::kViewsPermitted);
uassert(ErrorCodes::CommandNotSupportedOnView,
"mapReduce on a view is not supported",
!ctx.getView());
diff --git a/src/mongo/db/commands/run_aggregate.cpp b/src/mongo/db/commands/run_aggregate.cpp
index b7bd221ec61..273611a4327 100644
--- a/src/mongo/db/commands/run_aggregate.cpp
+++ b/src/mongo/db/commands/run_aggregate.cpp
@@ -709,7 +709,7 @@ Status runAggregate(OperationContext* opCtx,
// must never hold open storage cursors while ignoring interrupt.
InterruptibleLockGuard interruptibleLockAcquisition(opCtx->lockState());
- auto initContext = [&](AutoGetCollectionViewMode m) -> void {
+ auto initContext = [&](auto_get_collection::ViewMode m) -> void {
ctx.emplace(opCtx,
nss,
m,
@@ -822,7 +822,7 @@ Status runAggregate(OperationContext* opCtx,
collatorToUseMatchesDefault = match;
// Obtain collection locks on the execution namespace; that is, the oplog.
- initContext(AutoGetCollectionViewMode::kViewsForbidden);
+ initContext(auto_get_collection::ViewMode::kViewsForbidden);
} else if (nss.isCollectionlessAggregateNS() && pipelineInvolvedNamespaces.empty()) {
uassert(4928901,
str::stream() << AggregateCommandRequest::kCollectionUUIDFieldName
@@ -844,7 +844,7 @@ Status runAggregate(OperationContext* opCtx,
ctx == boost::none);
} else {
// This is a regular aggregation. Lock the collection or view.
- initContext(AutoGetCollectionViewMode::kViewsPermitted);
+ initContext(auto_get_collection::ViewMode::kViewsPermitted);
auto [collator, match] =
PipelineD::resolveCollator(opCtx,
request.getCollation().get_value_or(BSONObj()),
diff --git a/src/mongo/db/commands/validate_db_metadata_cmd.cpp b/src/mongo/db/commands/validate_db_metadata_cmd.cpp
index 3ffeae5e66d..ff51cd3b2d2 100644
--- a/src/mongo/db/commands/validate_db_metadata_cmd.cpp
+++ b/src/mongo/db/commands/validate_db_metadata_cmd.cpp
@@ -191,8 +191,11 @@ public:
auto apiVersion = APIParameters::get(opCtx).getAPIVersion().value_or("");
// We permit views here so that user requested views can be allowed.
- AutoGetCollection collection(
- opCtx, coll, LockMode::MODE_IS, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection collection(opCtx,
+ coll,
+ LockMode::MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
// If it view, just do the validations for view.
if (auto viewDef = collection.getView()) {
diff --git a/src/mongo/db/db_raii.cpp b/src/mongo/db/db_raii.cpp
index 1ae023eccbd..1b6585ca0d7 100644
--- a/src/mongo/db/db_raii.cpp
+++ b/src/mongo/db/db_raii.cpp
@@ -617,32 +617,32 @@ AutoGetCollectionForReadBase<AutoGetCollectionType, EmplaceAutoCollFunc>::
EmplaceAutoGetCollectionForRead::EmplaceAutoGetCollectionForRead(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs)
+ AutoGetCollection::Options options)
: _opCtx(opCtx),
_nsOrUUID(nsOrUUID),
- _viewMode(viewMode),
- _deadline(deadline),
- _secondaryNssOrUUIDs(secondaryNssOrUUIDs) {
+ _viewMode(options._viewMode),
+ _deadline(options._deadline),
+ _secondaryNssOrUUIDs(std::move(options._secondaryNssOrUUIDs)) {
// Multi-document transactions need MODE_IX locks, otherwise MODE_IS.
_collectionLockMode = getLockModeForQuery(opCtx, nsOrUUID.nss());
}
void EmplaceAutoGetCollectionForRead::emplace(boost::optional<AutoGetCollection>& autoColl) const {
autoColl.emplace(
- _opCtx, _nsOrUUID, _collectionLockMode, _viewMode, _deadline, _secondaryNssOrUUIDs);
+ _opCtx,
+ _nsOrUUID,
+ _collectionLockMode,
+ AutoGetCollection::Options{}.viewMode(_viewMode).deadline(_deadline).secondaryNssOrUUIDs(
+ _secondaryNssOrUUIDs));
}
-AutoGetCollectionForRead::AutoGetCollectionForRead(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs)
+AutoGetCollectionForRead::AutoGetCollectionForRead(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ AutoGetCollection::Options options)
: AutoGetCollectionForReadBase(opCtx,
- EmplaceAutoGetCollectionForRead(
- opCtx, nsOrUUID, viewMode, deadline, secondaryNssOrUUIDs)) {
+ EmplaceAutoGetCollectionForRead(opCtx, nsOrUUID, options)) {
+ auto& secondaryNssOrUUIDs = options._secondaryNssOrUUIDs;
+
// All relevant locks are held. Check secondary collections and verify they are valid for
// use.
if (getCollection() && !secondaryNssOrUUIDs.empty()) {
@@ -658,7 +658,7 @@ AutoGetCollectionForReadLockFree::EmplaceHelper::EmplaceHelper(
OperationContext* opCtx,
CollectionCatalogStasher& catalogStasher,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline,
bool isLockFreeReadSubOperation)
: _opCtx(opCtx),
@@ -718,16 +718,13 @@ void AutoGetCollectionForReadLockFree::EmplaceHelper::emplace(
// behavior for the primary collection.
});
},
- _viewMode,
- _deadline);
+ AutoGetCollectionLockFree::Options{}.viewMode(_viewMode).deadline(_deadline));
}
AutoGetCollectionForReadLockFree::AutoGetCollectionForReadLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs)
+ AutoGetCollection::Options options)
: _catalogStash(opCtx) {
bool isLockFreeReadSubOperation = opCtx->isLockFreeReadsOp();
@@ -737,6 +734,10 @@ AutoGetCollectionForReadLockFree::AutoGetCollectionForReadLockFree(
invariant(supportsLockFreeRead(opCtx) &&
(!opCtx->recoveryUnit()->isActive() || isLockFreeReadSubOperation));
+ auto& viewMode = options._viewMode;
+ auto& deadline = options._deadline;
+ auto& secondaryNssOrUUIDs = options._secondaryNssOrUUIDs;
+
EmplaceHelper emplaceFunc(
opCtx, _catalogStash, nsOrUUID, viewMode, deadline, isLockFreeReadSubOperation);
acquireCollectionAndConsistentSnapshot(
@@ -764,13 +765,12 @@ AutoGetCollectionForReadLockFree::AutoGetCollectionForReadLockFree(
AutoGetCollectionForReadMaybeLockFree::AutoGetCollectionForReadMaybeLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs) {
+ AutoGetCollection::Options options) {
+
if (supportsLockFreeRead(opCtx)) {
- _autoGetLockFree.emplace(opCtx, nsOrUUID, viewMode, deadline, secondaryNssOrUUIDs);
+ _autoGetLockFree.emplace(opCtx, nsOrUUID, std::move(options));
} else {
- _autoGet.emplace(opCtx, nsOrUUID, viewMode, deadline, secondaryNssOrUUIDs);
+ _autoGet.emplace(opCtx, nsOrUUID, std::move(options));
}
}
@@ -811,11 +811,15 @@ AutoGetCollectionForReadCommandBase<AutoGetCollectionForReadType>::
AutoGetCollectionForReadCommandBase(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline,
AutoStatsTracker::LogMode logMode,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs)
- : _autoCollForRead(opCtx, nsOrUUID, viewMode, deadline, secondaryNssOrUUIDs),
+ : _autoCollForRead(
+ opCtx,
+ nsOrUUID,
+ AutoGetCollection::Options{}.viewMode(viewMode).deadline(deadline).secondaryNssOrUUIDs(
+ secondaryNssOrUUIDs)),
_statsTracker(opCtx,
_autoCollForRead.getNss(),
Top::LockType::ReadLocked,
@@ -842,7 +846,7 @@ AutoGetCollectionForReadCommandBase<AutoGetCollectionForReadType>::
AutoGetCollectionForReadCommandLockFree::AutoGetCollectionForReadCommandLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline,
AutoStatsTracker::LogMode logMode,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs) {
@@ -912,7 +916,7 @@ OldClientContext::OldClientContext(OperationContext* opCtx,
AutoGetCollectionForReadCommandMaybeLockFree::AutoGetCollectionForReadCommandMaybeLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline,
AutoStatsTracker::LogMode logMode,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs) {
diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h
index cd3bfa635ee..948a7271823 100644
--- a/src/mongo/db/db_raii.h
+++ b/src/mongo/db/db_raii.h
@@ -143,16 +143,14 @@ class EmplaceAutoGetCollectionForRead {
public:
EmplaceAutoGetCollectionForRead(OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
- Date_t deadline,
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs);
+ AutoGetCollection::Options options = {});
void emplace(boost::optional<AutoGetCollection>& autoColl) const;
private:
OperationContext* _opCtx;
const NamespaceStringOrUUID& _nsOrUUID;
- AutoGetCollectionViewMode _viewMode;
+ auto_get_collection::ViewMode _viewMode;
Date_t _deadline;
LockMode _collectionLockMode;
const std::vector<NamespaceStringOrUUID> _secondaryNssOrUUIDs;
@@ -177,12 +175,9 @@ private:
class AutoGetCollectionForRead
: public AutoGetCollectionForReadBase<AutoGetCollection, EmplaceAutoGetCollectionForRead> {
public:
- AutoGetCollectionForRead(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
- Date_t deadline = Date_t::max(),
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
+ AutoGetCollectionForRead(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ AutoGetCollection::Options = {});
/**
* Indicates whether any namespace in 'secondaryNssOrUUIDs' is a view or sharded.
@@ -205,12 +200,9 @@ private:
*/
class AutoGetCollectionForReadLockFree {
public:
- AutoGetCollectionForReadLockFree(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
- Date_t deadline = Date_t::max(),
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
+ AutoGetCollectionForReadLockFree(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ AutoGetCollection::Options = {});
explicit operator bool() const {
return static_cast<bool>(getCollection());
@@ -254,7 +246,7 @@ private:
EmplaceHelper(OperationContext* opCtx,
CollectionCatalogStasher& catalogStasher,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode,
+ auto_get_collection::ViewMode viewMode,
Date_t deadline,
bool isLockFreeReadSubOperation);
@@ -264,7 +256,7 @@ private:
OperationContext* _opCtx;
CollectionCatalogStasher& _catalogStasher;
const NamespaceStringOrUUID& _nsOrUUID;
- AutoGetCollectionViewMode _viewMode;
+ auto_get_collection::ViewMode _viewMode;
Date_t _deadline;
// Set to true if the lock helper using this EmplaceHelper is nested under another lock-free
@@ -289,12 +281,9 @@ private:
*/
class AutoGetCollectionForReadMaybeLockFree {
public:
- AutoGetCollectionForReadMaybeLockFree(
- OperationContext* opCtx,
- const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
- Date_t deadline = Date_t::max(),
- const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
+ AutoGetCollectionForReadMaybeLockFree(OperationContext* opCtx,
+ const NamespaceStringOrUUID& nsOrUUID,
+ AutoGetCollection::Options options = {});
/**
* Passthrough functions to either _autoGet or _autoGetLockFree.
@@ -332,7 +321,7 @@ public:
AutoGetCollectionForReadCommandBase(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode viewMode = auto_get_collection::ViewMode::kViewsForbidden,
Date_t deadline = Date_t::max(),
AutoStatsTracker::LogMode logMode = AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
@@ -380,7 +369,7 @@ public:
AutoGetCollectionForReadCommand(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode viewMode = auto_get_collection::ViewMode::kViewsForbidden,
Date_t deadline = Date_t::max(),
AutoStatsTracker::LogMode logMode = AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {})
@@ -396,7 +385,7 @@ public:
AutoGetCollectionForReadCommandLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode viewMode = auto_get_collection::ViewMode::kViewsForbidden,
Date_t deadline = Date_t::max(),
AutoStatsTracker::LogMode logMode = AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
@@ -444,7 +433,7 @@ public:
AutoGetCollectionForReadCommandMaybeLockFree(
OperationContext* opCtx,
const NamespaceStringOrUUID& nsOrUUID,
- AutoGetCollectionViewMode viewMode = AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode viewMode = auto_get_collection::ViewMode::kViewsForbidden,
Date_t deadline = Date_t::max(),
AutoStatsTracker::LogMode logMode = AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
const std::vector<NamespaceStringOrUUID>& secondaryNssOrUUIDs = {});
diff --git a/src/mongo/db/db_raii_multi_collection_test.cpp b/src/mongo/db/db_raii_multi_collection_test.cpp
index 9fa5b4e9a30..8f3e4820c37 100644
--- a/src/mongo/db/db_raii_multi_collection_test.cpp
+++ b/src/mongo/db/db_raii_multi_collection_test.cpp
@@ -119,11 +119,10 @@ TEST_F(AutoGetCollectionMultiTest, SecondaryNssMinimumVisibleError) {
// Create the AutoGet* instance on multiple collections with _secondaryNss2 and it should throw.
std::vector<NamespaceStringOrUUID> secondaryNamespaces{NamespaceStringOrUUID(_secondaryNss2)};
- ASSERT_THROWS_CODE(AutoGetCollectionForRead(opCtx1,
- _primaryNss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNamespaces),
+ ASSERT_THROWS_CODE(AutoGetCollectionForRead(
+ opCtx1,
+ _primaryNss,
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNamespaces)),
AssertionException,
ErrorCodes::SnapshotUnavailable);
@@ -133,11 +132,8 @@ TEST_F(AutoGetCollectionMultiTest, SecondaryNssMinimumVisibleError) {
AutoGetCollection secondaryCollection1(opCtx1, _secondaryNss2, MODE_IS);
return secondaryCollection1->getMinimumVisibleSnapshot();
}());
- AutoGetCollectionForRead(opCtx1,
- _primaryNss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNamespaces);
+ AutoGetCollectionForRead(
+ opCtx1, _primaryNss, AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNamespaces));
}
TEST_F(AutoGetCollectionMultiTest, LockFreeMultiCollectionSingleDB) {
@@ -147,11 +143,10 @@ TEST_F(AutoGetCollectionMultiTest, LockFreeMultiCollectionSingleDB) {
invariant(!opCtx1->lockState()->isCollectionLockedForMode(_primaryNss, MODE_IS));
- AutoGetCollectionForReadLockFree autoGet(opCtx1,
- NamespaceStringOrUUID(_primaryNss),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- _secondaryNssOrUUIDVec);
+ AutoGetCollectionForReadLockFree autoGet(
+ opCtx1,
+ NamespaceStringOrUUID(_primaryNss),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(_secondaryNssOrUUIDVec));
auto locker = opCtx1->lockState();
locker->dump();
@@ -181,11 +176,10 @@ TEST_F(AutoGetCollectionMultiTest, LockedDuplicateNamespaces) {
invariant(!opCtx1->lockState()->isCollectionLockedForMode(_primaryNss, MODE_IS));
- AutoGetCollectionForRead autoGet(opCtx1,
- NamespaceStringOrUUID(_primaryNss),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- duplicateNssVector);
+ AutoGetCollectionForRead autoGet(
+ opCtx1,
+ NamespaceStringOrUUID(_primaryNss),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(duplicateNssVector));
auto locker = opCtx1->lockState();
locker->dump();
@@ -208,11 +202,10 @@ TEST_F(AutoGetCollectionMultiTest, LockFreeMultiDBs) {
createCollections(opCtx1);
- AutoGetCollectionForReadLockFree autoGet(opCtx1,
- NamespaceStringOrUUID(_primaryNss),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- _secondaryNssOtherDbNssVec);
+ AutoGetCollectionForReadLockFree autoGet(
+ opCtx1,
+ NamespaceStringOrUUID(_primaryNss),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(_secondaryNssOtherDbNssVec));
auto locker = opCtx1->lockState();
locker->dump();
@@ -235,11 +228,10 @@ TEST_F(AutoGetCollectionMultiTest, LockFreeSecondaryNamespaceNotFoundIsOK) {
createCollectionsExceptOneSecondary(opCtx1);
- AutoGetCollectionForReadLockFree autoGet(opCtx1,
- NamespaceStringOrUUID(_primaryNss),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- _secondaryNssOrUUIDAllVec);
+ AutoGetCollectionForReadLockFree autoGet(
+ opCtx1,
+ NamespaceStringOrUUID(_primaryNss),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(_secondaryNssOrUUIDAllVec));
invariant(opCtx1->lockState()->isLocked());
ASSERT(!CollectionCatalog::get(opCtx1)->lookupCollectionByNamespace(opCtx1, _secondaryNss2));
@@ -250,11 +242,10 @@ TEST_F(AutoGetCollectionMultiTest, LockedSecondaryNamespaceNotFound) {
createCollectionsExceptOneSecondary(opCtx1);
- AutoGetCollectionForRead autoGet(opCtx1,
- NamespaceStringOrUUID(_primaryNss),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- _secondaryNssOrUUIDVec);
+ AutoGetCollectionForRead autoGet(
+ opCtx1,
+ NamespaceStringOrUUID(_primaryNss),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(_secondaryNssOrUUIDVec));
auto locker = opCtx1->lockState();
diff --git a/src/mongo/db/db_raii_test.cpp b/src/mongo/db/db_raii_test.cpp
index 5a60b752977..776afdfa0aa 100644
--- a/src/mongo/db/db_raii_test.cpp
+++ b/src/mongo/db/db_raii_test.cpp
@@ -116,10 +116,10 @@ TEST_F(DBRAIITestFixture, AutoGetCollectionForReadCollLockDeadline) {
ASSERT(client1.second->lockState()->isCollectionLockedForMode(nss, MODE_X));
failsWithLockTimeout(
[&] {
- AutoGetCollectionForRead acfr(client2.second.get(),
- nss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollectionForRead acfr(
+ client2.second.get(),
+ nss,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -129,10 +129,10 @@ TEST_F(DBRAIITestFixture, AutoGetCollectionForReadDBLockDeadline) {
ASSERT(client1.second->lockState()->isDbLockedForMode(nss.dbName(), MODE_X));
failsWithLockTimeout(
[&] {
- AutoGetCollectionForRead coll(client2.second.get(),
- nss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollectionForRead coll(
+ client2.second.get(),
+ nss,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -142,10 +142,10 @@ TEST_F(DBRAIITestFixture, AutoGetCollectionForReadGlobalLockDeadline) {
ASSERT(client1.second->lockState()->isLocked());
failsWithLockTimeout(
[&] {
- AutoGetCollectionForRead coll(client2.second.get(),
- nss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now() + timeoutMs);
+ AutoGetCollectionForRead coll(
+ client2.second.get(),
+ nss,
+ AutoGetCollection::Options{}.deadline(Date_t::now() + timeoutMs));
},
timeoutMs);
}
@@ -158,10 +158,8 @@ TEST_F(DBRAIITestFixture, AutoGetCollectionForReadDeadlineNow) {
failsWithLockTimeout(
[&] {
- AutoGetCollectionForRead coll(client2.second.get(),
- nss,
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::now());
+ AutoGetCollectionForRead coll(
+ client2.second.get(), nss, AutoGetCollection::Options{}.deadline(Date_t::now()));
},
Milliseconds(0));
}
@@ -175,7 +173,7 @@ TEST_F(DBRAIITestFixture, AutoGetCollectionForReadDeadlineMin) {
failsWithLockTimeout(
[&] {
AutoGetCollectionForRead coll(
- client2.second.get(), nss, AutoGetCollectionViewMode::kViewsForbidden, Date_t());
+ client2.second.get(), nss, AutoGetCollection::Options{}.deadline(Date_t()));
},
Milliseconds(0));
}
diff --git a/src/mongo/db/pipeline/document_source_cursor.cpp b/src/mongo/db/pipeline/document_source_cursor.cpp
index 084274467d9..81e023837b9 100644
--- a/src/mongo/db/pipeline/document_source_cursor.cpp
+++ b/src/mongo/db/pipeline/document_source_cursor.cpp
@@ -144,11 +144,10 @@ void DocumentSourceCursor::loadBatch() {
tassert(5565800,
"Expected PlanExecutor to use an external lock policy",
_exec->lockPolicy() == PlanExecutor::LockPolicy::kLockExternally);
- autoColl.emplace(pExpCtx->opCtx,
- _exec->nss(),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- _exec->getSecondaryNamespaces());
+ autoColl.emplace(
+ pExpCtx->opCtx,
+ _exec->nss(),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(_exec->getSecondaryNamespaces()));
uassertStatusOK(repl::ReplicationCoordinator::get(pExpCtx->opCtx)
->checkCanServeReadsFor(pExpCtx->opCtx, _exec->nss(), true));
@@ -227,11 +226,10 @@ Value DocumentSourceCursor::serialize(boost::optional<ExplainOptions::Verbosity>
{
auto opCtx = pExpCtx->opCtx;
auto secondaryNssList = _exec->getSecondaryNamespaces();
- AutoGetCollectionForReadMaybeLockFree readLock(opCtx,
- _exec->nss(),
- AutoGetCollectionViewMode::kViewsForbidden,
- Date_t::max(),
- secondaryNssList);
+ AutoGetCollectionForReadMaybeLockFree readLock(
+ opCtx,
+ _exec->nss(),
+ AutoGetCollection::Options{}.secondaryNssOrUUIDs(secondaryNssList));
MultipleCollectionAccessor collections(opCtx,
&readLock.getCollection(),
readLock.getNss(),
diff --git a/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp b/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp
index c341101d893..4e72fa27af3 100644
--- a/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp
+++ b/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp
@@ -251,7 +251,7 @@ std::deque<BSONObj> CommonMongodProcessInterface::listCatalog(OperationContext*
AutoGetCollectionForReadCommandMaybeLockFree collLock(
opCtx,
systemViewsNamespaces.front(),
- AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode::kViewsForbidden,
Date_t::max(),
AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
{++systemViewsNamespaces.cbegin(), systemViewsNamespaces.cend()});
@@ -434,7 +434,7 @@ CommonMongodProcessInterface::attachCursorSourceToPipelineForLocalRead(Pipeline*
autoColl.emplace(expCtx->opCtx,
nsOrUUID,
- AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode::kViewsForbidden,
Date_t::max(),
AutoStatsTracker::LogMode::kUpdateTop,
secondaryNamespaces);
diff --git a/src/mongo/db/query/cqf_get_executor.cpp b/src/mongo/db/query/cqf_get_executor.cpp
index 2d99062273c..1884e4956cd 100644
--- a/src/mongo/db/query/cqf_get_executor.cpp
+++ b/src/mongo/db/query/cqf_get_executor.cpp
@@ -353,7 +353,7 @@ static void populateAdditionalScanDefs(
for (const auto& involvedNss : involvedCollections) {
// TODO handle views?
AutoGetCollectionForReadCommandMaybeLockFree ctx(
- opCtx, involvedNss, AutoGetCollectionViewMode::kViewsForbidden);
+ opCtx, involvedNss, auto_get_collection::ViewMode::kViewsForbidden);
const CollectionPtr& collection = ctx ? ctx.getCollection() : CollectionPtr::null;
const bool collectionExists = collection != nullptr;
const std::string uuidStr =
diff --git a/src/mongo/db/s/collection_sharding_runtime.cpp b/src/mongo/db/s/collection_sharding_runtime.cpp
index 664542076c5..54369d0aa5b 100644
--- a/src/mongo/db/s/collection_sharding_runtime.cpp
+++ b/src/mongo/db/s/collection_sharding_runtime.cpp
@@ -507,9 +507,9 @@ CollectionCriticalSection::CollectionCriticalSection(OperationContext* opCtx,
AutoGetCollection autoColl(_opCtx,
_nss,
MODE_S,
- AutoGetCollectionViewMode::kViewsForbidden,
- _opCtx->getServiceContext()->getPreciseClockSource()->now() +
- Milliseconds(migrationLockAcquisitionMaxWaitMS.load()));
+ AutoGetCollection::Options{}.deadline(
+ _opCtx->getServiceContext()->getPreciseClockSource()->now() +
+ Milliseconds(migrationLockAcquisitionMaxWaitMS.load())));
auto* const csr = CollectionShardingRuntime::get(_opCtx, _nss);
auto csrLock = CollectionShardingRuntime::CSRLock::lockExclusive(opCtx, csr);
invariant(csr->getCurrentMetadataIfKnown());
@@ -528,9 +528,9 @@ void CollectionCriticalSection::enterCommitPhase() {
AutoGetCollection autoColl(_opCtx,
_nss,
MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- _opCtx->getServiceContext()->getPreciseClockSource()->now() +
- Milliseconds(migrationLockAcquisitionMaxWaitMS.load()));
+ AutoGetCollection::Options{}.deadline(
+ _opCtx->getServiceContext()->getPreciseClockSource()->now() +
+ Milliseconds(migrationLockAcquisitionMaxWaitMS.load())));
auto* const csr = CollectionShardingRuntime::get(_opCtx, _nss);
auto csrLock = CollectionShardingRuntime::CSRLock::lockExclusive(_opCtx, csr);
invariant(csr->getCurrentMetadataIfKnown());
diff --git a/src/mongo/db/s/collmod_coordinator.cpp b/src/mongo/db/s/collmod_coordinator.cpp
index 3e5abedde21..9c6d352393f 100644
--- a/src/mongo/db/s/collmod_coordinator.cpp
+++ b/src/mongo/db/s/collmod_coordinator.cpp
@@ -159,8 +159,11 @@ ExecutorFuture<void> CollModCoordinator::_runImpl(
}
{
- AutoGetCollection coll{
- opCtx, nss(), MODE_IS, AutoGetCollectionViewMode::kViewsPermitted};
+ AutoGetCollection coll{opCtx,
+ nss(),
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted)};
checkCollectionUUIDMismatch(opCtx, nss(), *coll, _request.getCollectionUUID());
}
diff --git a/src/mongo/db/s/create_collection_coordinator.cpp b/src/mongo/db/s/create_collection_coordinator.cpp
index e49fc035752..ff58d129036 100644
--- a/src/mongo/db/s/create_collection_coordinator.cpp
+++ b/src/mongo/db/s/create_collection_coordinator.cpp
@@ -126,7 +126,7 @@ BSONObj resolveCollationForUserQueries(OperationContext* opCtx,
!requestedCollator);
}
- AutoGetCollection autoColl(opCtx, nss, MODE_IS, AutoGetCollectionViewMode::kViewsForbidden);
+ AutoGetCollection autoColl(opCtx, nss, MODE_IS);
const auto actualCollator = [&]() -> const CollatorInterface* {
const auto& coll = autoColl.getCollection();
@@ -926,8 +926,11 @@ void CreateCollectionCoordinator::_createCollectionAndIndexes(
ShardingRecoveryService::get(opCtx)->releaseRecoverableCriticalSection(
opCtx, originalNss(), _critSecReason, ShardingCatalogClient::kMajorityWriteConcern);
_doc.setDisregardCriticalSectionOnOriginalNss(true);
- viewLock.emplace(
- opCtx, originalNss(), LockMode::MODE_X, AutoGetCollectionViewMode::kViewsPermitted);
+ viewLock.emplace(opCtx,
+ originalNss(),
+ LockMode::MODE_X,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
// Once the exclusive access has been reacquired, ensure that no data race occurred.
auto catalog = CollectionCatalog::get(opCtx);
if (catalog->lookupView(opCtx, originalNss()) ||
diff --git a/src/mongo/db/s/drop_collection_coordinator.cpp b/src/mongo/db/s/drop_collection_coordinator.cpp
index 332d1bebf17..2a658d16066 100644
--- a/src/mongo/db/s/drop_collection_coordinator.cpp
+++ b/src/mongo/db/s/drop_collection_coordinator.cpp
@@ -87,8 +87,11 @@ ExecutorFuture<void> DropCollectionCoordinator::_runImpl(
}
{
- AutoGetCollection coll{
- opCtx, nss(), MODE_IS, AutoGetCollectionViewMode::kViewsPermitted};
+ AutoGetCollection coll{opCtx,
+ nss(),
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted)};
checkCollectionUUIDMismatch(opCtx, nss(), *coll, _doc.getCollectionUUID());
}
diff --git a/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp b/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
index f85f73c0ef4..5ddda7894a8 100644
--- a/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
+++ b/src/mongo/db/s/flush_routing_table_cache_updates_command.cpp
@@ -117,8 +117,11 @@ public:
boost::optional<SharedSemiFuture<void>> criticalSectionSignal;
{
- AutoGetCollection autoColl(
- opCtx, ns(), MODE_IS, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection autoColl(opCtx,
+ ns(),
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
// If the primary is in the critical section, secondaries must wait for the commit
// to finish on the primary in case a secondary's caller has an afterClusterTime
diff --git a/src/mongo/db/s/get_shard_version_command.cpp b/src/mongo/db/s/get_shard_version_command.cpp
index 858e1be224f..391d9d2ca71 100644
--- a/src/mongo/db/s/get_shard_version_command.cpp
+++ b/src/mongo/db/s/get_shard_version_command.cpp
@@ -92,7 +92,11 @@ public:
"configServer",
Grid::get(opCtx)->shardRegistry()->getConfigServerConnectionString().toString());
- AutoGetCollection autoColl(opCtx, nss, MODE_IS, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection autoColl(
+ opCtx,
+ nss,
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(auto_get_collection::ViewMode::kViewsPermitted));
auto* const csr = CollectionShardingRuntime::get(opCtx, nss);
const auto optMetadata = csr->getCurrentMetadataIfKnown();
diff --git a/src/mongo/db/s/migration_source_manager.cpp b/src/mongo/db/s/migration_source_manager.cpp
index 164af14539b..5dd023e176f 100644
--- a/src/mongo/db/s/migration_source_manager.cpp
+++ b/src/mongo/db/s/migration_source_manager.cpp
@@ -276,9 +276,9 @@ void MigrationSourceManager::startClone() {
AutoGetCollection autoColl(_opCtx,
nss(),
replEnabled ? MODE_IX : MODE_X,
- AutoGetCollectionViewMode::kViewsForbidden,
- _opCtx->getServiceContext()->getPreciseClockSource()->now() +
- Milliseconds(migrationLockAcquisitionMaxWaitMS.load()));
+ AutoGetCollection::Options{}.deadline(
+ _opCtx->getServiceContext()->getPreciseClockSource()->now() +
+ Milliseconds(migrationLockAcquisitionMaxWaitMS.load())));
auto* const csr = CollectionShardingRuntime::get(_opCtx, nss());
const auto csrLock = CollectionShardingRuntime::CSRLock::lockExclusive(_opCtx, csr);
diff --git a/src/mongo/db/s/refine_collection_shard_key_coordinator.cpp b/src/mongo/db/s/refine_collection_shard_key_coordinator.cpp
index 0a617517986..42ba6cbfb15 100644
--- a/src/mongo/db/s/refine_collection_shard_key_coordinator.cpp
+++ b/src/mongo/db/s/refine_collection_shard_key_coordinator.cpp
@@ -118,8 +118,11 @@ ExecutorFuture<void> RefineCollectionShardKeyCoordinator::_runImpl(
getForwardableOpMetadata().setOn(opCtx);
{
- AutoGetCollection coll{
- opCtx, nss(), MODE_IS, AutoGetCollectionViewMode::kViewsPermitted};
+ AutoGetCollection coll{opCtx,
+ nss(),
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted)};
checkCollectionUUIDMismatch(opCtx, nss(), *coll, _request.getCollectionUUID());
}
diff --git a/src/mongo/db/s/rename_collection_coordinator.cpp b/src/mongo/db/s/rename_collection_coordinator.cpp
index e1dc8fea867..9f0c978d321 100644
--- a/src/mongo/db/s/rename_collection_coordinator.cpp
+++ b/src/mongo/db/s/rename_collection_coordinator.cpp
@@ -147,8 +147,11 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl(
(!_doc.getExpectedSourceUUID() && !_doc.getExpectedTargetUUID()));
{
- AutoGetCollection coll{
- opCtx, fromNss, MODE_IS, AutoGetCollectionViewMode::kViewsPermitted};
+ AutoGetCollection coll{opCtx,
+ fromNss,
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted)};
checkCollectionUUIDMismatch(
opCtx, fromNss, *coll, _doc.getExpectedSourceUUID());
diff --git a/src/mongo/db/s/reshard_collection_coordinator.cpp b/src/mongo/db/s/reshard_collection_coordinator.cpp
index 28872ee8268..7f4d5ce9095 100644
--- a/src/mongo/db/s/reshard_collection_coordinator.cpp
+++ b/src/mongo/db/s/reshard_collection_coordinator.cpp
@@ -137,8 +137,11 @@ ExecutorFuture<void> ReshardCollectionCoordinator::_runImpl(
getForwardableOpMetadata().setOn(opCtx);
{
- AutoGetCollection coll{
- opCtx, nss(), MODE_IS, AutoGetCollectionViewMode::kViewsPermitted};
+ AutoGetCollection coll{opCtx,
+ nss(),
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted)};
checkCollectionUUIDMismatch(opCtx, nss(), *coll, _doc.getCollectionUUID());
}
diff --git a/src/mongo/db/s/resharding/resharding_oplog_application.cpp b/src/mongo/db/s/resharding/resharding_oplog_application.cpp
index 775ec10d37a..89da093dda5 100644
--- a/src/mongo/db/s/resharding/resharding_oplog_application.cpp
+++ b/src/mongo/db/s/resharding/resharding_oplog_application.cpp
@@ -145,22 +145,22 @@ Status ReshardingOplogApplicationRules::applyOperation(OperationContext* opCtx,
try {
WriteUnitOfWork wuow(opCtx);
- AutoGetCollection autoCollOutput(opCtx,
- _outputNss,
- MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- getDeadline(opCtx));
+ AutoGetCollection autoCollOutput(
+ opCtx,
+ _outputNss,
+ MODE_IX,
+ AutoGetCollection::Options{}.deadline(getDeadline(opCtx)));
uassert(
ErrorCodes::NamespaceNotFound,
str::stream() << "Failed to apply op during resharding due to missing collection "
<< _outputNss.ns(),
autoCollOutput);
- AutoGetCollection autoCollStash(opCtx,
- _myStashNss,
- MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- getDeadline(opCtx));
+ AutoGetCollection autoCollStash(
+ opCtx,
+ _myStashNss,
+ MODE_IX,
+ AutoGetCollection::Options{}.deadline(getDeadline(opCtx)));
uassert(
ErrorCodes::NamespaceNotFound,
str::stream() << "Failed to apply op during resharding due to missing collection "
@@ -451,11 +451,8 @@ void ReshardingOplogApplicationRules::_applyDelete_inlock(OperationContext* opCt
// single replica set transaction that is executed if we apply rule #4, so we therefore must run
// 'findByIdAndNoopUpdate' as a part of the single replica set transaction.
runWithTransaction(opCtx, _outputNss, [this, idQuery](OperationContext* opCtx) {
- AutoGetCollection autoCollOutput(opCtx,
- _outputNss,
- MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- getDeadline(opCtx));
+ AutoGetCollection autoCollOutput(
+ opCtx, _outputNss, MODE_IX, AutoGetCollection::Options{}.deadline(getDeadline(opCtx)));
uassert(ErrorCodes::NamespaceNotFound,
str::stream() << "Failed to apply op during resharding due to missing collection "
<< _outputNss.ns(),
@@ -500,11 +497,8 @@ void ReshardingOplogApplicationRules::_applyDelete_inlock(OperationContext* opCt
continue;
}
- AutoGetCollection autoCollStash(opCtx,
- coll,
- MODE_IX,
- AutoGetCollectionViewMode::kViewsForbidden,
- getDeadline(opCtx));
+ AutoGetCollection autoCollStash(
+ opCtx, coll, MODE_IX, AutoGetCollection::Options{}.deadline(getDeadline(opCtx)));
uassert(
ErrorCodes::NamespaceNotFound,
str::stream() << "Failed to apply op during resharding due to missing collection "
diff --git a/src/mongo/db/s/shard_key_util.cpp b/src/mongo/db/s/shard_key_util.cpp
index 95283ba0049..33f597cee8b 100644
--- a/src/mongo/db/s/shard_key_util.cpp
+++ b/src/mongo/db/s/shard_key_util.cpp
@@ -235,7 +235,11 @@ bool validateShardKeyIndexExistsOrCreateIfPossible(OperationContext* opCtx,
void validateShardKeyIsNotEncrypted(OperationContext* opCtx,
const NamespaceString& nss,
const ShardKeyPattern& shardKeyPattern) {
- AutoGetCollection collection(opCtx, nss, MODE_IS, AutoGetCollectionViewMode::kViewsPermitted);
+ AutoGetCollection collection(
+ opCtx,
+ nss,
+ MODE_IS,
+ AutoGetCollection::Options{}.viewMode(auto_get_collection::ViewMode::kViewsPermitted));
if (!collection || collection.getView()) {
return;
}
diff --git a/src/mongo/db/s/shard_server_op_observer.cpp b/src/mongo/db/s/shard_server_op_observer.cpp
index 0e138e333ec..a148115c004 100644
--- a/src/mongo/db/s/shard_server_op_observer.cpp
+++ b/src/mongo/db/s/shard_server_op_observer.cpp
@@ -294,21 +294,25 @@ void ShardServerOpObserver::onInserts(OperationContext* opCtx,
!recoverable_critical_section_util::inRecoveryMode(opCtx)) {
const auto collCSDoc = CollectionCriticalSectionDocument::parse(
IDLParserContext("ShardServerOpObserver"), insertedDoc);
- opCtx->recoveryUnit()->onCommit([opCtx,
- insertedNss = collCSDoc.getNss(),
- reason = collCSDoc.getReason().getOwned()](
- boost::optional<Timestamp>) {
- boost::optional<AutoGetCollection> lockCollectionIfNotPrimary;
- if (!isStandaloneOrPrimary(opCtx)) {
- lockCollectionIfNotPrimary.emplace(
- opCtx, insertedNss, MODE_IX, AutoGetCollectionViewMode::kViewsPermitted);
- }
-
- UninterruptibleLockGuard noInterrupt(opCtx->lockState());
- auto* const csr = CollectionShardingRuntime::get(opCtx, insertedNss);
- auto csrLock = CollectionShardingRuntime ::CSRLock::lockExclusive(opCtx, csr);
- csr->enterCriticalSectionCatchUpPhase(csrLock, reason);
- });
+ opCtx->recoveryUnit()->onCommit(
+ [opCtx,
+ insertedNss = collCSDoc.getNss(),
+ reason = collCSDoc.getReason().getOwned()](boost::optional<Timestamp>) {
+ boost::optional<AutoGetCollection> lockCollectionIfNotPrimary;
+ if (!isStandaloneOrPrimary(opCtx)) {
+ lockCollectionIfNotPrimary.emplace(
+ opCtx,
+ insertedNss,
+ MODE_IX,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
+ }
+
+ UninterruptibleLockGuard noInterrupt(opCtx->lockState());
+ auto* const csr = CollectionShardingRuntime::get(opCtx, insertedNss);
+ auto csrLock = CollectionShardingRuntime ::CSRLock::lockExclusive(opCtx, csr);
+ csr->enterCriticalSectionCatchUpPhase(csrLock, reason);
+ });
}
if (nss == NamespaceString::kShardCollectionCatalogNamespace &&
@@ -464,7 +468,11 @@ void ShardServerOpObserver::onUpdate(OperationContext* opCtx, const OplogUpdateE
boost::optional<AutoGetCollection> lockCollectionIfNotPrimary;
if (!isStandaloneOrPrimary(opCtx)) {
lockCollectionIfNotPrimary.emplace(
- opCtx, updatedNss, MODE_IX, AutoGetCollectionViewMode::kViewsPermitted);
+ opCtx,
+ updatedNss,
+ MODE_IX,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
}
UninterruptibleLockGuard noInterrupt(opCtx->lockState());
@@ -580,7 +588,11 @@ void ShardServerOpObserver::onDelete(OperationContext* opCtx,
boost::optional<AutoGetCollection> lockCollectionIfNotPrimary;
if (!isStandaloneOrPrimary(opCtx)) {
lockCollectionIfNotPrimary.emplace(
- opCtx, deletedNss, MODE_IX, AutoGetCollectionViewMode::kViewsPermitted);
+ opCtx,
+ deletedNss,
+ MODE_IX,
+ AutoGetCollection::Options{}.viewMode(
+ auto_get_collection::ViewMode::kViewsPermitted));
}
UninterruptibleLockGuard noInterrupt(opCtx->lockState());
diff --git a/src/mongo/db/s/sharding_ddl_util.cpp b/src/mongo/db/s/sharding_ddl_util.cpp
index 626e9e7624d..ba16739d2ff 100644
--- a/src/mongo/db/s/sharding_ddl_util.cpp
+++ b/src/mongo/db/s/sharding_ddl_util.cpp
@@ -546,8 +546,9 @@ boost::optional<UUID> getCollectionUUID(OperationContext* opCtx,
AutoGetCollection autoColl(opCtx,
nss,
MODE_IS,
- allowViews ? AutoGetCollectionViewMode::kViewsPermitted
- : AutoGetCollectionViewMode::kViewsForbidden);
+ AutoGetCollection::Options{}.viewMode(
+ allowViews ? auto_get_collection::ViewMode::kViewsPermitted
+ : auto_get_collection::ViewMode::kViewsForbidden));
return autoColl ? boost::make_optional(autoColl->uuid()) : boost::none;
}
diff --git a/src/mongo/db/stats/storage_stats.cpp b/src/mongo/db/stats/storage_stats.cpp
index 497285f940e..f092a96738f 100644
--- a/src/mongo/db/stats/storage_stats.cpp
+++ b/src/mongo/db/stats/storage_stats.cpp
@@ -81,7 +81,7 @@ Status appendCollectionStorageStats(OperationContext* opCtx,
try {
autoColl.emplace(opCtx,
collNss,
- AutoGetCollectionViewMode::kViewsForbidden,
+ auto_get_collection::ViewMode::kViewsForbidden,
waitForLock ? Date_t::max() : Date_t::now());
} catch (const ExceptionFor<ErrorCodes::LockTimeout>& ex) {
return failed(ex);