summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabe Villasana <gabe.villasana@mondodb.com>2019-06-04 14:29:09 -0400
committerGabe Villasana <villagab4@gmail.com>2019-06-26 17:04:38 -0400
commited66b586a0e6bc97e4ca91ce33d71d6c303b5278 (patch)
tree701019a311086cd9e50aac33b24ba28759d606f8 /src
parent6cb22a4feef4e5eb03412e392d2274707965f9b9 (diff)
downloadmongo-ed66b586a0e6bc97e4ca91ce33d71d6c303b5278.tar.gz
SERVER-39524 remove NamespaceString::virtualized() and friends
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/catalog/capped_utils.cpp5
-rw-r--r--src/mongo/db/catalog/collection_impl.cpp4
-rw-r--r--src/mongo/db/catalog/database_impl.cpp11
-rw-r--r--src/mongo/db/cloner.cpp4
-rw-r--r--src/mongo/db/commands.cpp4
-rw-r--r--src/mongo/db/commands/compact.cpp5
-rw-r--r--src/mongo/db/commands/dbcommands.cpp5
-rw-r--r--src/mongo/db/commands/touch.cpp4
-rw-r--r--src/mongo/db/commands/validate.cpp5
-rw-r--r--src/mongo/db/namespace_string.h34
-rw-r--r--src/mongo/db/namespace_string_test.cpp40
-rw-r--r--src/mongo/db/pipeline/document_source_merge.cpp4
-rw-r--r--src/mongo/db/pipeline/document_source_merge_test.cpp34
-rw-r--r--src/mongo/db/pipeline/document_source_out.cpp2
-rw-r--r--src/mongo/db/query/get_executor.cpp8
-rw-r--r--src/mongo/db/repl/databases_cloner.cpp4
-rw-r--r--src/mongo/idl/idl_parser.cpp3
17 files changed, 10 insertions, 166 deletions
diff --git a/src/mongo/db/catalog/capped_utils.cpp b/src/mongo/db/catalog/capped_utils.cpp
index e16f19cc2d0..2b77bbe794d 100644
--- a/src/mongo/db/catalog/capped_utils.cpp
+++ b/src/mongo/db/catalog/capped_utils.cpp
@@ -83,11 +83,6 @@ Status emptyCapped(OperationContext* opCtx, const NamespaceString& collectionNam
str::stream() << "Cannot truncate a system collection: " << collectionName);
}
- if (collectionName.isVirtualized()) {
- return Status(ErrorCodes::IllegalOperation,
- str::stream() << "Cannot truncate a virtual collection: " << collectionName);
- }
-
if ((repl::ReplicationCoordinator::get(opCtx)->getReplicationMode() !=
repl::ReplicationCoordinator::modeNone) &&
collectionName.isOplog()) {
diff --git a/src/mongo/db/catalog/collection_impl.cpp b/src/mongo/db/catalog/collection_impl.cpp
index ff9dcdd6691..59b64121247 100644
--- a/src/mongo/db/catalog/collection_impl.cpp
+++ b/src/mongo/db/catalog/collection_impl.cpp
@@ -258,8 +258,8 @@ bool CollectionImpl::isInitialized() const {
}
bool CollectionImpl::requiresIdIndex() const {
- if (_ns.isVirtualized() || _ns.isOplog()) {
- // No indexes on virtual collections or the oplog.
+ if (_ns.isOplog()) {
+ // No indexes on the oplog.
return false;
}
diff --git a/src/mongo/db/catalog/database_impl.cpp b/src/mongo/db/catalog/database_impl.cpp
index 98fb3ff9eb9..08add96be59 100644
--- a/src/mongo/db/catalog/database_impl.cpp
+++ b/src/mongo/db/catalog/database_impl.cpp
@@ -98,12 +98,6 @@ Status validateDBNameForWindows(StringData dbname) {
}
} // namespace
-void uassertNamespaceNotIndex(StringData ns, StringData caller) {
- uassert(17320,
- str::stream() << "cannot do " << caller << " on namespace with a $ in it: " << ns,
- NamespaceString::normal(ns));
-}
-
Status DatabaseImpl::validateDBName(StringData dbname) {
if (dbname.size() <= 0)
return Status(ErrorCodes::BadValue, "db name is empty");
@@ -365,8 +359,6 @@ Status DatabaseImpl::dropCollectionEvenIfSystem(OperationContext* opCtx,
auto uuid = collection->uuid();
auto uuidString = uuid ? uuid.get().toString() : "no UUID";
- uassertNamespaceNotIndex(nss.toString(), "dropCollection");
-
// Make sure no indexes builds are in progress.
// Use massert() to be consistent with IndexCatalog::dropAllIndexes().
auto numIndexesInProgress = collection->getIndexCatalog()->numIndexesInProgress(opCtx);
@@ -565,14 +557,15 @@ void DatabaseImpl::_checkCanCreateCollection(OperationContext* opCtx,
massert(17399,
str::stream() << "Cannot create collection " << nss << " - collection already exists.",
getCollection(opCtx, nss) == nullptr);
- uassertNamespaceNotIndex(nss.ns(), "createCollection");
uassert(14037,
"can't create user databases on a --configsvr instance",
serverGlobalParams.clusterRole != ClusterRole::ConfigServer || nss.isOnInternalDb());
+
uassert(17316,
str::stream() << "cannot create a collection with an empty name on db: " << nss.db(),
!nss.coll().empty());
+
uassert(28838, "cannot create a non-capped oplog collection", options.capped || !nss.isOplog());
uassert(ErrorCodes::DatabaseDropPending,
str::stream() << "Cannot create collection " << nss
diff --git a/src/mongo/db/cloner.cpp b/src/mongo/db/cloner.cpp
index 803bc7108df..f2d86cd8f64 100644
--- a/src/mongo/db/cloner.cpp
+++ b/src/mongo/db/cloner.cpp
@@ -558,10 +558,6 @@ StatusWith<std::vector<BSONObj>> Cloner::filterCollectionsForClone(
continue;
}
}
- if (!ns.isNormal()) {
- LOG(2) << "\t\t not cloning because has $ ";
- continue;
- }
finalCollections.push_back(collection.getOwned());
}
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp
index addedfdb387..87508338423 100644
--- a/src/mongo/db/commands.cpp
+++ b/src/mongo/db/commands.cpp
@@ -257,8 +257,8 @@ NamespaceStringOrUUID CommandHelpers::parseNsOrUUID(StringData dbname, const BSO
// Ensure collection identifier is not a Command
const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj));
uassert(ErrorCodes::InvalidNamespace,
- str::stream() << "Invalid collection name specified '" << nss.ns() << "'",
- nss.isNormal());
+ str::stream() << "Invalid collection name specified '" << nss.ns(),
+ !(nss.ns().find('$') != std::string::npos && nss.ns() != "local.oplog.$main"));
return nss;
}
}
diff --git a/src/mongo/db/commands/compact.cpp b/src/mongo/db/commands/compact.cpp
index a1262f66412..8ab36f3ac03 100644
--- a/src/mongo/db/commands/compact.cpp
+++ b/src/mongo/db/commands/compact.cpp
@@ -99,11 +99,6 @@ public:
return false;
}
- if (!nss.isNormal()) {
- errmsg = "bad namespace name";
- return false;
- }
-
if (nss.isSystem()) {
// Items in system.* cannot be moved as there might be pointers to them.
errmsg = "can't compact a system namespace";
diff --git a/src/mongo/db/commands/dbcommands.cpp b/src/mongo/db/commands/dbcommands.cpp
index 71343fa05e4..6df61000eac 100644
--- a/src/mongo/db/commands/dbcommands.cpp
+++ b/src/mongo/db/commands/dbcommands.cpp
@@ -233,11 +233,6 @@ public:
BSONObjBuilder& result) {
const NamespaceString nsToDrop(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj));
- if (nsToDrop.isVirtualized()) {
- errmsg = "can't drop a virtual collection";
- return false;
- }
-
if ((repl::ReplicationCoordinator::get(opCtx)->getReplicationMode() !=
repl::ReplicationCoordinator::modeNone) &&
nsToDrop.isOplog()) {
diff --git a/src/mongo/db/commands/touch.cpp b/src/mongo/db/commands/touch.cpp
index 8449b4d7d4f..1ad4dd6c215 100644
--- a/src/mongo/db/commands/touch.cpp
+++ b/src/mongo/db/commands/touch.cpp
@@ -86,10 +86,6 @@ public:
std::string& errmsg,
BSONObjBuilder& result) {
const NamespaceString nss = CommandHelpers::parseNsCollectionRequired(dbname, cmdObj);
- if (!nss.isNormal()) {
- errmsg = "bad namespace name";
- return false;
- }
bool touch_indexes(cmdObj["index"].trueValue());
bool touch_data(cmdObj["data"].trueValue());
diff --git a/src/mongo/db/commands/validate.cpp b/src/mongo/db/commands/validate.cpp
index 4a57e81f477..f45e87b8148 100644
--- a/src/mongo/db/commands/validate.cpp
+++ b/src/mongo/db/commands/validate.cpp
@@ -115,11 +115,6 @@ public:
result.append("note", deprecationWarning);
}
- if (!nss.isNormal() && full) {
- uasserted(ErrorCodes::CommandFailed,
- "Can only run full validate on a regular collection");
- }
-
if (!serverGlobalParams.quiet.load()) {
LOG(0) << "CMD: validate " << nss.ns();
}
diff --git a/src/mongo/db/namespace_string.h b/src/mongo/db/namespace_string.h
index 1ad127e4b32..14bc6a448ca 100644
--- a/src/mongo/db/namespace_string.h
+++ b/src/mongo/db/namespace_string.h
@@ -227,9 +227,6 @@ public:
bool isOplog() const {
return oplog(_ns);
}
- bool isSpecial() const {
- return special(_ns);
- }
bool isOnInternalDb() const {
if (db() == kAdminDb)
return true;
@@ -239,22 +236,12 @@ public:
return true;
return false;
}
- bool isNormal() const {
- return normal(_ns);
- }
+
bool isOrphanCollection() const {
return db() == kOrphanCollectionDb && coll().startsWith(kOrphanCollectionPrefix);
}
/**
- * Returns whether the NamespaceString references a special collection that cannot be used for
- * generic data storage.
- */
- bool isVirtualized() const {
- return virtualized(_ns);
- }
-
- /**
* Returns whether a namespace is replicated, based only on its string value. One notable
* omission is that map reduce `tmp.mr` collections may or may not be replicated. Callers must
* decide how to handle that case separately.
@@ -316,31 +303,12 @@ public:
}
/**
- * @return true if ns is 'normal'. A "$" is used for namespaces holding index data,
- * which do not contain BSON objects in their records. ("oplog.$main" is the exception)
- */
- static bool normal(StringData ns) {
- return !virtualized(ns);
- }
-
- /**
* @return true if the ns is an oplog one, otherwise false.
*/
static bool oplog(StringData ns) {
return ns.startsWith("local.oplog.");
}
- static bool special(StringData ns) {
- return !normal(ns) || ns.substr(ns.find('.')).startsWith(".system.");
- }
-
- /**
- * Check if `ns` references a special collection that cannot be used for generic data storage.
- */
- static bool virtualized(StringData ns) {
- return ns.find('$') != std::string::npos && ns != "local.oplog.$main";
- }
-
/**
* samples:
* good
diff --git a/src/mongo/db/namespace_string_test.cpp b/src/mongo/db/namespace_string_test.cpp
index 0d7989b3dc8..baba77e9855 100644
--- a/src/mongo/db/namespace_string_test.cpp
+++ b/src/mongo/db/namespace_string_test.cpp
@@ -36,20 +36,6 @@
namespace mongo {
namespace {
-TEST(NamespaceStringTest, Normal) {
- ASSERT(NamespaceString::normal("a"));
- ASSERT(NamespaceString::normal("a.b"));
- ASSERT(NamespaceString::normal("a.b.c"));
-
- ASSERT(!NamespaceString::normal("a.b.$c"));
- ASSERT(!NamespaceString::normal("a.b.$.c"));
- ASSERT(!NamespaceString::normal("a.b$.c"));
- ASSERT(!NamespaceString::normal("a$.b.c"));
-
- ASSERT(NamespaceString::normal("local.oplog.$main"));
- ASSERT(NamespaceString::normal("local.oplog.rs"));
-}
-
TEST(NamespaceStringTest, Oplog) {
ASSERT(!NamespaceString::oplog("a"));
ASSERT(!NamespaceString::oplog("a.b"));
@@ -60,28 +46,6 @@ TEST(NamespaceStringTest, Oplog) {
ASSERT(NamespaceString::oplog("local.oplog.$foo"));
}
-TEST(NamespaceStringTest, Special) {
- ASSERT(NamespaceString::special("a.$.b"));
- ASSERT(NamespaceString::special("a.system.foo"));
- ASSERT(!NamespaceString::special("a.foo"));
- ASSERT(!NamespaceString::special("a.foo.system.bar"));
- ASSERT(!NamespaceString::special("a.systemfoo"));
-}
-
-TEST(NamespaceStringTest, Virtualized) {
- ASSERT(!NamespaceString::virtualized("a"));
- ASSERT(!NamespaceString::virtualized("a.b"));
- ASSERT(!NamespaceString::virtualized("a.b.c"));
-
- ASSERT(NamespaceString::virtualized("a.b.$c"));
- ASSERT(NamespaceString::virtualized("a.b.$.c"));
- ASSERT(NamespaceString::virtualized("a.b$.c"));
- ASSERT(NamespaceString::virtualized("a$.b.c"));
-
- ASSERT(!NamespaceString::virtualized("local.oplog.$main"));
- ASSERT(!NamespaceString::virtualized("local.oplog.rs"));
-}
-
TEST(NamespaceStringTest, DatabaseValidNames) {
ASSERT(NamespaceString::validDBName("foo", NamespaceString::DollarInDbNameBehavior::Allow));
ASSERT(NamespaceString::validDBName("foo$bar", NamespaceString::DollarInDbNameBehavior::Allow));
@@ -133,10 +97,6 @@ TEST(NamespaceStringTest, DatabaseValidNames) {
"ThisIsADatabaseNameThatBrokeAllRecordsForValidLengthForDBName63"));
ASSERT(!NamespaceString::validDBName(
"WhileThisDatabaseNameExceedsTheMaximumLengthForDatabaseNamesof63"));
-
- ASSERT(NamespaceString::normal("asdads"));
- ASSERT(!NamespaceString::normal("asda$ds"));
- ASSERT(NamespaceString::normal("local.oplog.$main"));
}
TEST(NamespaceStringTest, ListCollectionsCursorNS) {
diff --git a/src/mongo/db/pipeline/document_source_merge.cpp b/src/mongo/db/pipeline/document_source_merge.cpp
index 01917bd5c2f..30bb802cdca 100644
--- a/src/mongo/db/pipeline/document_source_merge.cpp
+++ b/src/mongo/db/pipeline/document_source_merge.cpp
@@ -371,10 +371,6 @@ boost::intrusive_ptr<DocumentSource> DocumentSourceMerge::create(
"{} cannot be used with a 'linearizable' read concern level"_format(kStageName),
readConcernLevel != repl::ReadConcernLevel::kLinearizableReadConcern);
- uassert(51180,
- "Cannot {} into special collection: '{}'"_format(kStageName, outputNs.coll()),
- !outputNs.isSpecial());
-
if (whenMatched == WhenMatched::kPipeline) {
if (!letVariables) {
// For custom pipeline-style updates, default the 'let' variables to {new: "$$ROOT"},
diff --git a/src/mongo/db/pipeline/document_source_merge_test.cpp b/src/mongo/db/pipeline/document_source_merge_test.cpp
index 50e75e9d264..32ed7b9f963 100644
--- a/src/mongo/db/pipeline/document_source_merge_test.cpp
+++ b/src/mongo/db/pipeline/document_source_merge_test.cpp
@@ -199,38 +199,14 @@ TEST_F(DocumentSourceMergeTest, FailsToParseIfIntoIsObjectWithEmptyCollectionNam
TEST_F(DocumentSourceMergeTest, FailsToParseIfIntoIsNotAValidUserCollection) {
auto spec = BSON("$merge"
- << "$test");
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge"
- << "system.views");
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge"
- << ".test.");
+ << ".test.");
ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, ErrorCodes::InvalidNamespace);
spec = BSON("$merge" << BSON("into"
- << "$test"));
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge" << BSON("into"
- << "system.views"));
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge" << BSON("into"
<< ".test."));
ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, ErrorCodes::InvalidNamespace);
spec = BSON("$merge" << BSON("into" << BSON("coll"
- << "$test")));
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge" << BSON("into" << BSON("coll"
- << "system.views")));
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge" << BSON("into" << BSON("coll"
<< ".test.")));
ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, ErrorCodes::InvalidNamespace);
}
@@ -281,13 +257,7 @@ TEST_F(DocumentSourceMergeTest, FailsToParseIfDbIsNotAValidDatabaseName) {
auto spec = BSON("$merge" << BSON("into" << BSON("coll"
<< "target_collection"
<< "db"
- << "$invalid")));
- ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, 51180);
-
- spec = BSON("$merge" << BSON("into" << BSON("coll"
- << "target_collection"
- << "db"
- << ".test")));
+ << ".test")));
ASSERT_THROWS_CODE(createMergeStage(spec), AssertionException, ErrorCodes::InvalidNamespace);
}
diff --git a/src/mongo/db/pipeline/document_source_out.cpp b/src/mongo/db/pipeline/document_source_out.cpp
index 11cb1e3b3ef..318dfb47859 100644
--- a/src/mongo/db/pipeline/document_source_out.cpp
+++ b/src/mongo/db/pipeline/document_source_out.cpp
@@ -197,7 +197,7 @@ boost::intrusive_ptr<DocumentSource> DocumentSourceOut::create(
uassert(17385,
"Can't {} to special collection: {}"_format(kStageName, outputNs.coll()),
- !outputNs.isSpecial());
+ !outputNs.isSystem());
return new DocumentSourceOut(std::move(outputNs), expCtx);
}
diff --git a/src/mongo/db/query/get_executor.cpp b/src/mongo/db/query/get_executor.cpp
index a70435f298f..82ceb978a29 100644
--- a/src/mongo/db/query/get_executor.cpp
+++ b/src/mongo/db/query/get_executor.cpp
@@ -846,10 +846,6 @@ StatusWith<unique_ptr<PlanExecutor, PlanExecutor::Deleter>> getExecutorDelete(
if (nss.isSystem() && opCtx->lockState()->shouldConflictWithSecondaryBatchApplication()) {
uassert(12050, "cannot delete from system namespace", nss.isLegalClientSystemNS());
}
- if (nss.isVirtualized()) {
- log() << "cannot delete from a virtual collection: " << nss;
- uasserted(10100, "cannot delete from a virtual collection");
- }
}
if (collection && collection->isCapped()) {
@@ -983,10 +979,6 @@ StatusWith<unique_ptr<PlanExecutor, PlanExecutor::Deleter>> getExecutorUpdate(
str::stream() << "cannot update a system namespace: " << nss.ns(),
nss.isLegalClientSystemNS());
}
- if (nss.isVirtualized()) {
- log() << "cannot update a virtual collection: " << nss;
- uasserted(10155, "cannot update a virtual collection");
- }
// If there is no collection and this is an upsert, callers are supposed to create
// the collection prior to calling this method. Explain, however, will never do
diff --git a/src/mongo/db/repl/databases_cloner.cpp b/src/mongo/db/repl/databases_cloner.cpp
index 4ff67c27ac2..e2414897339 100644
--- a/src/mongo/db/repl/databases_cloner.cpp
+++ b/src/mongo/db/repl/databases_cloner.cpp
@@ -330,10 +330,6 @@ void DatabasesCloner::_onListDatabaseFinish(
LOG(1) << "Skipping 'system' collection: " << ns.ns();
return false;
}
- if (!ns.isNormal()) {
- LOG(1) << "Skipping non-normal collection: " << ns.ns();
- return false;
- }
LOG(2) << "Allowing cloning of collectionInfo: " << collInfo;
return true;
diff --git a/src/mongo/idl/idl_parser.cpp b/src/mongo/idl/idl_parser.cpp
index c28a17c16c0..0a45ac52709 100644
--- a/src/mongo/idl/idl_parser.cpp
+++ b/src/mongo/idl/idl_parser.cpp
@@ -252,9 +252,6 @@ NamespaceStringOrUUID IDLParserErrorContext::parseNsOrUUID(StringData dbname,
} else {
// Ensure collection identifier is not a Command
const NamespaceString nss(parseNSCollectionRequired(dbname, element));
- uassert(ErrorCodes::InvalidNamespace,
- str::stream() << "Invalid collection name specified '" << nss.ns() << "'",
- nss.isNormal());
return nss;
}
}