diff options
author | Gabe Villasana <gabe.villasana@mondodb.com> | 2019-06-04 14:29:09 -0400 |
---|---|---|
committer | Gabe Villasana <villagab4@gmail.com> | 2019-06-26 17:04:38 -0400 |
commit | ed66b586a0e6bc97e4ca91ce33d71d6c303b5278 (patch) | |
tree | 701019a311086cd9e50aac33b24ba28759d606f8 /src | |
parent | 6cb22a4feef4e5eb03412e392d2274707965f9b9 (diff) | |
download | mongo-ed66b586a0e6bc97e4ca91ce33d71d6c303b5278.tar.gz |
SERVER-39524 remove NamespaceString::virtualized() and friends
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/catalog/capped_utils.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/catalog/collection_impl.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/catalog/database_impl.cpp | 11 | ||||
-rw-r--r-- | src/mongo/db/cloner.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/commands.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/commands/compact.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/commands/dbcommands.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/commands/touch.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/commands/validate.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/namespace_string.h | 34 | ||||
-rw-r--r-- | src/mongo/db/namespace_string_test.cpp | 40 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_merge.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_merge_test.cpp | 34 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_out.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/query/get_executor.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/repl/databases_cloner.cpp | 4 | ||||
-rw-r--r-- | src/mongo/idl/idl_parser.cpp | 3 |
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; } } |