summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlukebhan <luke.bhan@vanderbilt.edu>2021-06-16 19:31:09 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-06-23 16:49:50 +0000
commitc4849034202d3e75960b99d9383cc43321ad866e (patch)
treeb4a574b7af0748651fc6f45c11b3fe8742a536c0
parent32d4d90cb12b46a57101b5de4e9ba08b5ab50c9e (diff)
downloadmongo-c4849034202d3e75960b99d9383cc43321ad866e.tar.gz
SERVER-57119 Changed view_catalog interface to only use NamespaceString
removed places where ns.ns() is called changed stringdata to namespace string for lookup function update view catalog update view catalog test fixed test fixed create coll
-rw-r--r--src/mongo/db/catalog/capped_utils.cpp4
-rw-r--r--src/mongo/db/catalog/coll_mod.cpp2
-rw-r--r--src/mongo/db/catalog/collection_compact.cpp2
-rw-r--r--src/mongo/db/catalog/create_collection.cpp6
-rw-r--r--src/mongo/db/catalog/drop_collection.cpp9
-rw-r--r--src/mongo/db/catalog/drop_indexes.cpp2
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp8
-rw-r--r--src/mongo/db/catalog/validate_state.cpp2
-rw-r--r--src/mongo/db/catalog_raii.cpp4
-rw-r--r--src/mongo/db/commands/create_indexes.cpp2
-rw-r--r--src/mongo/db/commands/drop_indexes.cpp2
-rw-r--r--src/mongo/db/commands/list_collections.cpp6
-rw-r--r--src/mongo/db/commands/run_aggregate.cpp8
-rw-r--r--src/mongo/db/query/find.cpp4
-rw-r--r--src/mongo/db/repl/oplog.cpp4
-rw-r--r--src/mongo/db/s/rename_collection_coordinator.cpp2
-rw-r--r--src/mongo/db/s/set_shard_version_command.cpp2
-rw-r--r--src/mongo/db/stats/storage_stats.cpp2
-rw-r--r--src/mongo/db/views/view_catalog.cpp27
-rw-r--r--src/mongo/db/views/view_catalog.h9
-rw-r--r--src/mongo/db/views/view_catalog_test.cpp11
21 files changed, 60 insertions, 58 deletions
diff --git a/src/mongo/db/catalog/capped_utils.cpp b/src/mongo/db/catalog/capped_utils.cpp
index a12247d6b69..91bf8f07154 100644
--- a/src/mongo/db/catalog/capped_utils.cpp
+++ b/src/mongo/db/catalog/capped_utils.cpp
@@ -74,7 +74,7 @@ Status emptyCapped(OperationContext* opCtx, const NamespaceString& collectionNam
CollectionWriter collection(opCtx, collectionName);
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "emptycapped not supported on view: " << collectionName.ns(),
- collection || !ViewCatalog::get(db)->lookup(opCtx, collectionName.ns()));
+ collection || !ViewCatalog::get(db)->lookup(opCtx, collectionName));
uassert(ErrorCodes::NamespaceNotFound, "no such collection", collection);
if (collectionName.isSystem() && !collectionName.isSystemDotProfile()) {
@@ -126,7 +126,7 @@ void cloneCollectionAsCapped(OperationContext* opCtx,
if (!fromCollection) {
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "cloneCollectionAsCapped not supported for views: " << fromNss,
- !ViewCatalog::get(db)->lookup(opCtx, fromNss.ns()));
+ !ViewCatalog::get(db)->lookup(opCtx, fromNss));
uasserted(ErrorCodes::NamespaceNotFound,
str::stream() << "source collection " << fromNss << " does not exist");
diff --git a/src/mongo/db/catalog/coll_mod.cpp b/src/mongo/db/catalog/coll_mod.cpp
index 3f3482dc199..4089551c0e6 100644
--- a/src/mongo/db/catalog/coll_mod.cpp
+++ b/src/mongo/db/catalog/coll_mod.cpp
@@ -501,7 +501,7 @@ Status _collModInternal(OperationContext* opCtx,
// May also modify a view instead of a collection.
boost::optional<ViewDefinition> view;
if (db && !coll) {
- const auto sharedView = ViewCatalog::get(db)->lookup(opCtx, nss.ns());
+ const auto sharedView = ViewCatalog::get(db)->lookup(opCtx, nss);
if (sharedView) {
// We copy the ViewDefinition as it is modified below to represent the requested state.
view = {*sharedView};
diff --git a/src/mongo/db/catalog/collection_compact.cpp b/src/mongo/db/catalog/collection_compact.cpp
index 6f699daf158..da74618fc1a 100644
--- a/src/mongo/db/catalog/collection_compact.cpp
+++ b/src/mongo/db/catalog/collection_compact.cpp
@@ -60,7 +60,7 @@ CollectionPtr getCollectionForCompact(OperationContext* opCtx,
if (!collection) {
std::shared_ptr<const ViewDefinition> view =
- ViewCatalog::get(database)->lookup(opCtx, collectionNss.ns());
+ ViewCatalog::get(database)->lookup(opCtx, collectionNss);
uassert(ErrorCodes::CommandNotSupportedOnView, "can't compact a view", !view);
uasserted(ErrorCodes::NamespaceNotFound, "collection does not exist");
}
diff --git a/src/mongo/db/catalog/create_collection.cpp b/src/mongo/db/catalog/create_collection.cpp
index 8ebd4f8c9ee..4f7a8167d69 100644
--- a/src/mongo/db/catalog/create_collection.cpp
+++ b/src/mongo/db/catalog/create_collection.cpp
@@ -205,7 +205,7 @@ Status _createTimeseries(OperationContext* opCtx,
}
auto db = autoDb.ensureDbExists();
- if (auto view = ViewCatalog::get(db)->lookup(opCtx, ns.ns()); view) {
+ if (auto view = ViewCatalog::get(db)->lookup(opCtx, ns); view) {
if (view->timeseries()) {
return Status(ErrorCodes::NamespaceExists,
str::stream()
@@ -292,7 +292,7 @@ Status _createTimeseries(OperationContext* opCtx,
}
auto db = autoColl.ensureDbExists();
- if (auto view = ViewCatalog::get(db)->lookup(opCtx, ns.ns())) {
+ if (auto view = ViewCatalog::get(db)->lookup(opCtx, ns)) {
if (view->timeseries()) {
return {ErrorCodes::NamespaceExists,
str::stream() << "A timeseries collection already exists. NS: " << ns};
@@ -384,7 +384,7 @@ Status _createCollection(OperationContext* opCtx,
str::stream() << "Collection already exists. NS: " << nss);
}
auto db = autoDb.ensureDbExists();
- if (auto view = ViewCatalog::get(db)->lookup(opCtx, nss.ns()); view) {
+ if (auto view = ViewCatalog::get(db)->lookup(opCtx, nss); view) {
if (view->timeseries()) {
return Status(ErrorCodes::NamespaceExists,
str::stream()
diff --git a/src/mongo/db/catalog/drop_collection.cpp b/src/mongo/db/catalog/drop_collection.cpp
index 5377d433fe2..e15204ddfca 100644
--- a/src/mongo/db/catalog/drop_collection.cpp
+++ b/src/mongo/db/catalog/drop_collection.cpp
@@ -77,8 +77,7 @@ Status _dropView(OperationContext* opCtx,
audit::logDropView(opCtx->getClient(), collectionName, "", {}, status.code());
return status;
}
- auto view =
- ViewCatalog::get(db)->lookupWithoutValidatingDurableViews(opCtx, collectionName.ns());
+ auto view = ViewCatalog::get(db)->lookupWithoutValidatingDurableViews(opCtx, collectionName);
if (!view) {
Status status = Status(ErrorCodes::NamespaceNotFound, "ns not found");
audit::logDropView(opCtx->getClient(), collectionName, "", {}, status.code());
@@ -86,7 +85,7 @@ Status _dropView(OperationContext* opCtx,
}
// Validates the view or throws an "invalid view" error.
- ViewCatalog::get(db)->lookup(opCtx, collectionName.ns());
+ ViewCatalog::get(db)->lookup(opCtx, collectionName);
Lock::CollectionLock collLock(opCtx, collectionName, MODE_IX);
// Operations all lock system.views in the end to prevent deadlock.
@@ -361,8 +360,8 @@ Status dropCollection(OperationContext* opCtx,
false /* appendNs */);
};
- auto view = ViewCatalog::get(db)->lookupWithoutValidatingDurableViews(
- opCtx, collectionName.ns());
+ auto view =
+ ViewCatalog::get(db)->lookupWithoutValidatingDurableViews(opCtx, collectionName);
if (!view) {
// Timeseries bucket collection may exist even without the view. If that is the case
// delete it.
diff --git a/src/mongo/db/catalog/drop_indexes.cpp b/src/mongo/db/catalog/drop_indexes.cpp
index 4af7afc812e..b299eec9ec7 100644
--- a/src/mongo/db/catalog/drop_indexes.cpp
+++ b/src/mongo/db/catalog/drop_indexes.cpp
@@ -65,7 +65,7 @@ Status checkView(OperationContext* opCtx,
Database* db,
const CollectionPtr& collection) {
if (!collection) {
- if (db && ViewCatalog::get(db)->lookup(opCtx, nss.ns())) {
+ if (db && ViewCatalog::get(db)->lookup(opCtx, nss)) {
return Status(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Cannot drop indexes on view " << nss);
}
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp
index 429f8100455..06f1fa8bc35 100644
--- a/src/mongo/db/catalog/rename_collection.cpp
+++ b/src/mongo/db/catalog/rename_collection.cpp
@@ -106,7 +106,7 @@ Status checkSourceAndTargetNamespaces(OperationContext* opCtx,
auto catalog = CollectionCatalog::get(opCtx);
const auto sourceColl = catalog->lookupCollectionByNamespace(opCtx, source);
if (!sourceColl) {
- if (ViewCatalog::get(db)->lookup(opCtx, source.ns()))
+ if (ViewCatalog::get(db)->lookup(opCtx, source))
return Status(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "cannot rename view: " << source);
return Status(ErrorCodes::NamespaceNotFound,
@@ -118,7 +118,7 @@ Status checkSourceAndTargetNamespaces(OperationContext* opCtx,
const auto targetColl = catalog->lookupCollectionByNamespace(opCtx, target);
if (!targetColl) {
- if (ViewCatalog::get(db)->lookup(opCtx, target.ns()))
+ if (ViewCatalog::get(db)->lookup(opCtx, target))
return Status(ErrorCodes::NamespaceExists,
str::stream() << "a view already exists with that name: " << target);
} else {
@@ -496,7 +496,7 @@ Status renameBetweenDBs(OperationContext* opCtx,
auto catalog = CollectionCatalog::get(opCtx);
const auto sourceColl = catalog->lookupCollectionByNamespace(opCtx, source);
if (!sourceColl) {
- if (sourceDB && ViewCatalog::get(sourceDB)->lookup(opCtx, source.ns()))
+ if (sourceDB && ViewCatalog::get(sourceDB)->lookup(opCtx, source))
return Status(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "cannot rename view: " << source);
return Status(ErrorCodes::NamespaceNotFound, "source namespace does not exist");
@@ -525,7 +525,7 @@ Status renameBetweenDBs(OperationContext* opCtx,
return Status(ErrorCodes::NamespaceExists, "target namespace exists");
}
- } else if (targetDB && ViewCatalog::get(targetDB)->lookup(opCtx, target.ns())) {
+ } else if (targetDB && ViewCatalog::get(targetDB)->lookup(opCtx, target)) {
return Status(ErrorCodes::NamespaceExists,
str::stream() << "a view already exists with that name: " << target);
}
diff --git a/src/mongo/db/catalog/validate_state.cpp b/src/mongo/db/catalog/validate_state.cpp
index 3a3a3f1b4cc..8109275ccd9 100644
--- a/src/mongo/db/catalog/validate_state.cpp
+++ b/src/mongo/db/catalog/validate_state.cpp
@@ -80,7 +80,7 @@ ValidateState::ValidateState(OperationContext* opCtx,
_collection = CollectionCatalog::get(opCtx)->lookupCollectionByNamespace(opCtx, _nss);
if (!_collection) {
- if (_database && ViewCatalog::get(_database)->lookup(opCtx, _nss.ns())) {
+ if (_database && ViewCatalog::get(_database)->lookup(opCtx, _nss)) {
uasserted(ErrorCodes::CommandNotSupportedOnView, "Cannot validate a view");
}
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp
index b7486200e80..bc21e6a5ef8 100644
--- a/src/mongo/db/catalog_raii.cpp
+++ b/src/mongo/db/catalog_raii.cpp
@@ -170,7 +170,7 @@ AutoGetCollection::AutoGetCollection(OperationContext* opCtx,
return;
}
- _view = ViewCatalog::get(db)->lookup(opCtx, _resolvedNss.ns());
+ _view = ViewCatalog::get(db)->lookup(opCtx, _resolvedNss);
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Namespace " << _resolvedNss.ns() << " is a timeseries collection",
!_view || viewMode == AutoGetCollectionViewMode::kViewsPermitted ||
@@ -282,7 +282,7 @@ AutoGetCollectionLockFree::AutoGetCollectionLockFree(OperationContext* opCtx,
return;
}
- _view = viewCatalog->lookup(opCtx, _resolvedNss.ns());
+ _view = viewCatalog->lookup(opCtx, _resolvedNss);
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Namespace " << _resolvedNss.ns() << " is a timeseries collection",
!_view || viewMode == AutoGetCollectionViewMode::kViewsPermitted ||
diff --git a/src/mongo/db/commands/create_indexes.cpp b/src/mongo/db/commands/create_indexes.cpp
index 94073a1cd38..44b909fbce9 100644
--- a/src/mongo/db/commands/create_indexes.cpp
+++ b/src/mongo/db/commands/create_indexes.cpp
@@ -295,7 +295,7 @@ CreateIndexesReply runCreateIndexesOnNewCollection(
auto db = databaseHolder->getDb(opCtx, ns.db());
uassert(ErrorCodes::CommandNotSupportedOnView,
"Cannot create indexes on a view",
- !db || !ViewCatalog::get(db)->lookup(opCtx, ns.ns()));
+ !db || !ViewCatalog::get(db)->lookup(opCtx, ns));
if (createCollImplicitly) {
// We need to create the collection.
diff --git a/src/mongo/db/commands/drop_indexes.cpp b/src/mongo/db/commands/drop_indexes.cpp
index c9ce56aae76..606b630fd4b 100644
--- a/src/mongo/db/commands/drop_indexes.cpp
+++ b/src/mongo/db/commands/drop_indexes.cpp
@@ -189,7 +189,7 @@ public:
AutoGetCollection autoColl(opCtx, toReIndexNss, MODE_X);
if (!autoColl) {
auto db = autoColl.getDb();
- if (db && ViewCatalog::get(db)->lookup(opCtx, toReIndexNss.ns()))
+ if (db && ViewCatalog::get(db)->lookup(opCtx, toReIndexNss))
uasserted(ErrorCodes::CommandNotSupportedOnView, "can't re-index a view");
else
uasserted(ErrorCodes::NamespaceNotFound, "collection does not exist");
diff --git a/src/mongo/db/commands/list_collections.cpp b/src/mongo/db/commands/list_collections.cpp
index 326a59aebd4..60fd329951d 100644
--- a/src/mongo/db/commands/list_collections.cpp
+++ b/src/mongo/db/commands/list_collections.cpp
@@ -370,8 +370,8 @@ public:
opCtx, collection, includePendingDrops, nameOnly);
}
- auto view = viewCatalog->lookupWithoutValidatingDurableViews(
- opCtx, nss.ns());
+ auto view =
+ viewCatalog->lookupWithoutValidatingDurableViews(opCtx, nss);
if (view && view->timeseries()) {
if (auto bucketsCollection = CollectionCatalog::get(opCtx)
->lookupCollectionByNamespace(
@@ -398,7 +398,7 @@ public:
if (collection && collection->getTimeseriesOptions() &&
!collection->ns().isDropPendingNamespace() &&
viewCatalog->lookupWithoutValidatingDurableViews(
- opCtx, collection->ns().getTimeseriesViewNamespace().ns()) &&
+ opCtx, collection->ns().getTimeseriesViewNamespace()) &&
(!authorizedCollections ||
as->isAuthorizedForAnyActionOnResource(
ResourcePattern::forExactNamespace(
diff --git a/src/mongo/db/commands/run_aggregate.cpp b/src/mongo/db/commands/run_aggregate.cpp
index a36560215ca..7626cfc06cc 100644
--- a/src/mongo/db/commands/run_aggregate.cpp
+++ b/src/mongo/db/commands/run_aggregate.cpp
@@ -362,7 +362,7 @@ StatusWith<StringMap<ExpressionContext::ResolvedNamespace>> resolveInvolvedNames
// that the inverse scenario (mistaking a view for a collection) is not an issue
// because $merge/$out cannot target a view.
auto nssToCheck = NamespaceString(request.getNamespace().db(), involvedNs.coll());
- if (viewCatalog && viewCatalog->lookup(opCtx, nssToCheck.ns())) {
+ if (viewCatalog && viewCatalog->lookup(opCtx, nssToCheck)) {
auto status = resolveViewDefinition(nssToCheck, viewCatalog);
if (!status.isOK()) {
return status;
@@ -379,7 +379,7 @@ StatusWith<StringMap<ExpressionContext::ResolvedNamespace>> resolveInvolvedNames
// pipeline because 'involvedNs' doesn't refer to a view namespace in our consistent
// snapshot of the view catalog.
resolvedNamespaces[involvedNs.coll()] = {involvedNs, std::vector<BSONObj>{}};
- } else if (viewCatalog->lookup(opCtx, involvedNs.ns())) {
+ } else if (viewCatalog->lookup(opCtx, involvedNs)) {
auto status = resolveViewDefinition(involvedNs, viewCatalog);
if (!status.isOK()) {
return status;
@@ -412,7 +412,7 @@ Status collatorCompatibleWithPipeline(OperationContext* opCtx,
continue;
}
- auto view = viewCatalog->lookup(opCtx, potentialViewNs.ns());
+ auto view = viewCatalog->lookup(opCtx, potentialViewNs);
if (!view) {
continue;
}
@@ -625,7 +625,7 @@ Status runAggregate(OperationContext* opCtx,
if (!origNss.isCollectionlessAggregateNS()) {
auto viewCatalog = DatabaseHolder::get(opCtx)->getViewCatalog(opCtx, origNss.db());
if (viewCatalog) {
- auto view = viewCatalog->lookup(opCtx, origNss.ns());
+ auto view = viewCatalog->lookup(opCtx, origNss);
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream()
<< "Namespace " << origNss.ns() << " is a timeseries collection",
diff --git a/src/mongo/db/query/find.cpp b/src/mongo/db/query/find.cpp
index 6c0b433d8ca..c4dac17cfec 100644
--- a/src/mongo/db/query/find.cpp
+++ b/src/mongo/db/query/find.cpp
@@ -288,8 +288,8 @@ Message getMore(OperationContext* opCtx,
Top::LockType::NotLocked,
AutoStatsTracker::LogMode::kUpdateTopAndCurOp,
CollectionCatalog::get(opCtx)->getDatabaseProfileLevel(nss.db()));
- auto view = autoDb.getDb() ? ViewCatalog::get(autoDb.getDb())->lookup(opCtx, nss.ns())
- : nullptr;
+ auto view =
+ autoDb.getDb() ? ViewCatalog::get(autoDb.getDb())->lookup(opCtx, nss) : nullptr;
uassert(
ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Namespace " << nss.ns()
diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp
index 2be565ae310..e9d9d988335 100644
--- a/src/mongo/db/repl/oplog.cpp
+++ b/src/mongo/db/repl/oplog.cpp
@@ -1168,7 +1168,7 @@ Status applyOperation_inlock(OperationContext* opCtx,
const bool haveWrappingWriteUnitOfWork = opCtx->lockState()->inAWriteUnitOfWork();
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "applyOps not supported on view: " << requestNss.ns(),
- collection || !ViewCatalog::get(db)->lookup(opCtx, requestNss.ns()));
+ collection || !ViewCatalog::get(db)->lookup(opCtx, requestNss));
// Decide whether to timestamp the write with the 'ts' field found in the operation. In general,
// we do this for secondary oplog application, but there are some exceptions.
@@ -1730,7 +1730,7 @@ Status applyCommand_inlock(OperationContext* opCtx,
auto databaseHolder = DatabaseHolder::get(opCtx);
auto db = databaseHolder->getDb(opCtx, nss.ns());
if (db && !CollectionCatalog::get(opCtx)->lookupCollectionByNamespace(opCtx, nss) &&
- ViewCatalog::get(db)->lookup(opCtx, nss.ns())) {
+ ViewCatalog::get(db)->lookup(opCtx, nss)) {
return {ErrorCodes::CommandNotSupportedOnView,
str::stream() << "applyOps not supported on view:" << nss.ns()};
}
diff --git a/src/mongo/db/s/rename_collection_coordinator.cpp b/src/mongo/db/s/rename_collection_coordinator.cpp
index f0e35dc6afb..d5c23e1df56 100644
--- a/src/mongo/db/s/rename_collection_coordinator.cpp
+++ b/src/mongo/db/s/rename_collection_coordinator.cpp
@@ -186,7 +186,7 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl(
uassert(ErrorCodes::CommandNotSupportedOnView,
str::stream() << "Can't rename to target collection `" << toNss
<< "` because it is a view.",
- !ViewCatalog::get(db)->lookup(opCtx, toNss.ns()));
+ !ViewCatalog::get(db)->lookup(opCtx, toNss));
}
}
diff --git a/src/mongo/db/s/set_shard_version_command.cpp b/src/mongo/db/s/set_shard_version_command.cpp
index c5b6353909e..608289cc0fe 100644
--- a/src/mongo/db/s/set_shard_version_command.cpp
+++ b/src/mongo/db/s/set_shard_version_command.cpp
@@ -152,7 +152,7 @@ public:
if (autoDb->getDb() &&
!CollectionCatalog::get(opCtx)->lookupCollectionByNamespace(opCtx, nss) &&
ViewCatalog::get(autoDb->getDb())
- ->lookupWithoutValidatingDurableViews(opCtx, nss.ns())) {
+ ->lookupWithoutValidatingDurableViews(opCtx, nss)) {
return true;
}
diff --git a/src/mongo/db/stats/storage_stats.cpp b/src/mongo/db/stats/storage_stats.cpp
index 6fa79c4ed52..73ae280e1c1 100644
--- a/src/mongo/db/stats/storage_stats.cpp
+++ b/src/mongo/db/stats/storage_stats.cpp
@@ -55,7 +55,7 @@ Status appendCollectionStorageStats(OperationContext* opCtx,
bool isTimeseries = false;
if (auto viewCatalog = DatabaseHolder::get(opCtx)->getViewCatalog(opCtx, nss.db())) {
- if (auto viewDef = viewCatalog->lookupWithoutValidatingDurableViews(opCtx, nss.ns())) {
+ if (auto viewDef = viewCatalog->lookupWithoutValidatingDurableViews(opCtx, nss)) {
isTimeseries = viewDef->timeseries();
}
}
diff --git a/src/mongo/db/views/view_catalog.cpp b/src/mongo/db/views/view_catalog.cpp
index 9d72eb06d60..e13f83d748a 100644
--- a/src/mongo/db/views/view_catalog.cpp
+++ b/src/mongo/db/views/view_catalog.cpp
@@ -511,7 +511,7 @@ Status ViewCatalog::_validateCollation(OperationContext* opCtx,
const std::vector<NamespaceString>& refs) const {
for (auto&& potentialViewNss : refs) {
auto otherView =
- _lookup(opCtx, potentialViewNss.ns(), ViewCatalogLookupBehavior::kValidateDurableViews);
+ _lookup(opCtx, potentialViewNss, ViewCatalogLookupBehavior::kValidateDurableViews);
if (otherView &&
!CollatorInterface::collatorsMatch(view.defaultCollator(),
otherView->defaultCollator())) {
@@ -542,8 +542,7 @@ Status ViewCatalog::createView(OperationContext* opCtx,
return Status(ErrorCodes::BadValue,
"View must be created on a view or collection in the same database");
- if (catalog->_lookup(
- opCtx, StringData(viewName.ns()), ViewCatalogLookupBehavior::kValidateDurableViews))
+ if (catalog->_lookup(opCtx, viewName, ViewCatalogLookupBehavior::kValidateDurableViews))
return Status(ErrorCodes::NamespaceExists, "Namespace already exists");
if (!NamespaceString::validCollectionName(viewOn.coll()))
@@ -585,7 +584,7 @@ Status ViewCatalog::modifyView(OperationContext* opCtx,
"View must be created on a view or collection in the same database");
auto viewPtr =
- catalog->_lookup(opCtx, viewName.ns(), ViewCatalogLookupBehavior::kValidateDurableViews);
+ catalog->_lookup(opCtx, viewName, ViewCatalogLookupBehavior::kValidateDurableViews);
if (!viewPtr)
return Status(ErrorCodes::NamespaceNotFound,
str::stream() << "cannot modify missing view " << viewName.ns());
@@ -642,8 +641,8 @@ Status ViewCatalog::dropView(OperationContext* opCtx,
catalogStorage.setIgnoreExternalChange(true);
// Save a copy of the view definition in case we need to roll back.
- auto viewPtr = catalog->_lookup(
- opCtx, viewName.ns(), ViewCatalogLookupBehavior::kValidateDurableViews);
+ auto viewPtr =
+ catalog->_lookup(opCtx, viewName, ViewCatalogLookupBehavior::kValidateDurableViews);
if (!viewPtr) {
return {ErrorCodes::NamespaceNotFound,
str::stream() << "cannot drop missing view: " << viewName.ns()};
@@ -679,8 +678,10 @@ Status ViewCatalog::dropView(OperationContext* opCtx,
}
std::shared_ptr<const ViewDefinition> ViewCatalog::_lookup(
- OperationContext* opCtx, StringData ns, ViewCatalogLookupBehavior lookupBehavior) const {
- ViewMap::const_iterator it = _viewMap.find(ns);
+ OperationContext* opCtx,
+ const NamespaceString& ns,
+ ViewCatalogLookupBehavior lookupBehavior) const {
+ ViewMap::const_iterator it = _viewMap.find(ns.ns());
if (it != _viewMap.end()) {
return it->second;
}
@@ -688,17 +689,17 @@ std::shared_ptr<const ViewDefinition> ViewCatalog::_lookup(
}
std::shared_ptr<ViewDefinition> ViewCatalog::_lookup(OperationContext* opCtx,
- StringData ns,
+ const NamespaceString& ns,
ViewCatalogLookupBehavior lookupBehavior) {
return std::const_pointer_cast<ViewDefinition>(
std::as_const(*this)._lookup(opCtx, ns, lookupBehavior));
}
std::shared_ptr<const ViewDefinition> ViewCatalog::lookup(OperationContext* opCtx,
- StringData ns) const {
+ const NamespaceString& ns) const {
if (!_valid && opCtx->getClient()->isFromUserConnection()) {
// We want to avoid lookups on invalid collection names.
- if (!NamespaceString::validCollectionName(ns)) {
+ if (!NamespaceString::validCollectionName(ns.ns())) {
return nullptr;
}
@@ -712,7 +713,7 @@ std::shared_ptr<const ViewDefinition> ViewCatalog::lookup(OperationContext* opCt
}
std::shared_ptr<const ViewDefinition> ViewCatalog::lookupWithoutValidatingDurableViews(
- OperationContext* opCtx, StringData ns) const {
+ OperationContext* opCtx, const NamespaceString& ns) const {
return _lookup(opCtx, ns, ViewCatalogLookupBehavior::kAllowInvalidDurableViews);
}
@@ -742,7 +743,7 @@ StatusWith<ResolvedView> ViewCatalog::resolveView(OperationContext* opCtx,
int depth = 0;
for (; depth < ViewGraph::kMaxViewDepth; depth++) {
auto view =
- _lookup(opCtx, resolvedNss->ns(), ViewCatalogLookupBehavior::kValidateDurableViews);
+ _lookup(opCtx, *resolvedNss, ViewCatalogLookupBehavior::kValidateDurableViews);
if (!view) {
// Return error status if pipeline is too large.
int pipelineSize = 0;
diff --git a/src/mongo/db/views/view_catalog.h b/src/mongo/db/views/view_catalog.h
index dc8a20c1baa..0903fb46cb3 100644
--- a/src/mongo/db/views/view_catalog.h
+++ b/src/mongo/db/views/view_catalog.h
@@ -122,14 +122,15 @@ public:
* Look up the 'nss' in the view catalog, returning a shared pointer to a View definition, or
* nullptr if it doesn't exist.
*/
- std::shared_ptr<const ViewDefinition> lookup(OperationContext* opCtx, StringData nss) const;
+ std::shared_ptr<const ViewDefinition> lookup(OperationContext* opCtx,
+ const NamespaceString& nss) const;
/**
* Same functionality as above, except this function skips validating durable views in the view
* catalog.
*/
std::shared_ptr<const ViewDefinition> lookupWithoutValidatingDurableViews(
- OperationContext* opCtx, StringData nss) const;
+ OperationContext* opCtx, const NamespaceString& nss) const;
/**
* Resolve the views on 'nss', transforming the pipeline appropriately. This function returns a
@@ -206,10 +207,10 @@ private:
const std::vector<NamespaceString>& refs) const;
std::shared_ptr<const ViewDefinition> _lookup(OperationContext* opCtx,
- StringData ns,
+ const NamespaceString& ns,
ViewCatalogLookupBehavior lookupBehavior) const;
std::shared_ptr<ViewDefinition> _lookup(OperationContext* opCtx,
- StringData ns,
+ const NamespaceString& ns,
ViewCatalogLookupBehavior lookupBehavior);
Status _reload(OperationContext* opCtx,
diff --git a/src/mongo/db/views/view_catalog_test.cpp b/src/mongo/db/views/view_catalog_test.cpp
index 742d281e30c..0a611924036 100644
--- a/src/mongo/db/views/view_catalog_test.cpp
+++ b/src/mongo/db/views/view_catalog_test.cpp
@@ -164,7 +164,8 @@ public:
return _db;
}
- std::shared_ptr<const ViewDefinition> lookup(OperationContext* opCtx, StringData ns) {
+ std::shared_ptr<const ViewDefinition> lookup(OperationContext* opCtx,
+ const NamespaceString& ns) {
Lock::DBLock dbLock(operationContext(), NamespaceString(ns).db(), MODE_IS);
return getViewCatalog()->lookup(operationContext(), ns);
}
@@ -495,7 +496,7 @@ TEST_F(ReplViewCatalogFixture, ModifyViewWithPipelineFailsOnIneligibleStage) {
}
TEST_F(ViewCatalogFixture, LookupMissingView) {
- ASSERT(!lookup(operationContext(), "db.view"_sd));
+ ASSERT(!lookup(operationContext(), NamespaceString("db.view")));
}
TEST_F(ViewCatalogFixture, LookupExistingView) {
@@ -504,7 +505,7 @@ TEST_F(ViewCatalogFixture, LookupExistingView) {
ASSERT_OK(createView(operationContext(), viewName, viewOn, emptyPipeline, emptyCollation));
- ASSERT(lookup(operationContext(), "db.view"_sd));
+ ASSERT(lookup(operationContext(), viewName));
}
TEST_F(ViewCatalogFixture, LookupRIDExistingView) {
@@ -621,13 +622,13 @@ TEST_F(ViewCatalogFixture, LookupRIDAfterModifyRollback) {
}
TEST_F(ViewCatalogFixture, CreateViewThenDropAndLookup) {
- const NamespaceString viewName("db.view");
+ NamespaceString viewName("db.view");
const NamespaceString viewOn("db.coll");
ASSERT_OK(createView(operationContext(), viewName, viewOn, emptyPipeline, emptyCollation));
ASSERT_OK(dropView(operationContext(), viewName));
- ASSERT(!lookup(operationContext(), "db.view"_sd));
+ ASSERT(!lookup(operationContext(), viewName));
}
TEST_F(ViewCatalogFixture, Iterate) {