summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2018-12-19 22:24:30 -0500
committerBenety Goh <benety@mongodb.com>2018-12-19 22:24:49 -0500
commitfc1aa5592b8783dc802668659ec87826d789dd2f (patch)
treeaf7436ffc208b4cd3389df91009d83ca4ad413ad /src/mongo
parent424946d39691708bad0b0719ce4e67138b747c5e (diff)
downloadmongo-fc1aa5592b8783dc802668659ec87826d789dd2f.tar.gz
SERVER-38700 unshim Database
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/SConscript3
-rw-r--r--src/mongo/db/catalog/SConscript15
-rw-r--r--src/mongo/db/catalog/database.cpp43
-rw-r--r--src/mongo/db/catalog/database.h286
-rw-r--r--src/mongo/db/catalog/database_holder_impl.cpp4
-rw-r--r--src/mongo/db/catalog/database_impl.cpp21
-rw-r--r--src/mongo/db/catalog/database_impl.h77
-rw-r--r--src/mongo/db/commands/SConscript1
-rw-r--r--src/mongo/db/matcher/SConscript1
-rw-r--r--src/mongo/db/repl/SConscript3
10 files changed, 72 insertions, 382 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript
index 3cfdc818fbb..76ac4282555 100644
--- a/src/mongo/db/SConscript
+++ b/src/mongo/db/SConscript
@@ -698,7 +698,6 @@ env.Library(
'$BUILD_DIR/mongo/idl/idl_parser',
'catalog/collection',
'catalog/database_holder',
- 'catalog/database',
'catalog/uuid_catalog',
'commands/test_commands_enabled',
'commands/txn_cmd_request',
@@ -1032,7 +1031,6 @@ env.Library(
],
LIBDEPS=[
'$BUILD_DIR/mongo/db/catalog/collection',
- '$BUILD_DIR/mongo/db/catalog/database',
'rw_concern_d',
'background',
'logical_clock',
@@ -1146,7 +1144,6 @@ env.Library(
'background',
'bson/dotted_path_support',
'catalog/collection',
- 'catalog/database',
'catalog/document_validation',
'catalog/index_catalog_entry',
'catalog/index_catalog',
diff --git a/src/mongo/db/catalog/SConscript b/src/mongo/db/catalog/SConscript
index 548e148f2cb..8a708417845 100644
--- a/src/mongo/db/catalog/SConscript
+++ b/src/mongo/db/catalog/SConscript
@@ -196,23 +196,12 @@ env.Library(
],
)
-env.Library(
- target='database',
- source=[
- "database.cpp",
- ],
- LIBDEPS=[
- '$BUILD_DIR/mongo/base',
- ],
-)
-
env.CppUnitTest(
target='database_test',
source=[
'database_test.cpp',
],
LIBDEPS=[
- 'database',
'multi_index_block',
'$BUILD_DIR/mongo/db/auth/authmocks',
'$BUILD_DIR/mongo/db/concurrency/lock_manager',
@@ -286,7 +275,6 @@ env.Library(
],
LIBDEPS=[
'collection',
- 'database',
'database_holder',
'$BUILD_DIR/mongo/base',
'$BUILD_DIR/mongo/db/namespace_string',
@@ -337,7 +325,6 @@ env.Library(
],
LIBDEPS_PRIVATE=[
'collection',
- 'database',
'uuid_catalog',
'$BUILD_DIR/mongo/db/repair_database',
'$BUILD_DIR/mongo/db/service_context',
@@ -372,7 +359,6 @@ env.Library(
LIBDEPS=[
'collection',
'collection_options',
- 'database',
'database_holder',
'health_log',
'index_catalog',
@@ -428,7 +414,6 @@ env.Library(
'$BUILD_DIR/mongo/db/write_ops',
'collection_options',
'collection',
- 'database',
'index_catalog',
'index_key_validate',
'multi_index_block',
diff --git a/src/mongo/db/catalog/database.cpp b/src/mongo/db/catalog/database.cpp
deleted file mode 100644
index 12ef918664b..00000000000
--- a/src/mongo/db/catalog/database.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/**
- * Copyright (C) 2018-present MongoDB, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the Server Side Public License, version 1,
- * as published by MongoDB, Inc.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * Server Side Public License for more details.
- *
- * You should have received a copy of the Server Side Public License
- * along with this program. If not, see
- * <http://www.mongodb.com/licensing/server-side-public-license>.
- *
- * As a special exception, the copyright holders give permission to link the
- * code of portions of this program with the OpenSSL library under certain
- * conditions as described in each individual source file and distribute
- * linked combinations including the program with the OpenSSL library. You
- * must comply with the Server Side Public License in all respects for
- * all of the code used other than as permitted herein. If you modify file(s)
- * with this exception, you may extend this exception to your version of the
- * file(s), but you are not obligated to do so. If you do not wish to do so,
- * delete this exception statement from your version. If you delete this
- * exception statement from all source files in the program, then also delete
- * it in the license file.
- */
-
-#include "mongo/platform/basic.h"
-
-#include "mongo/db/catalog/database.h"
-
-namespace mongo {
-
-Database::Impl::~Impl() = default;
-
-MONGO_DEFINE_SHIM(Database::makeImpl);
-
-void Database::TUHook::hook() noexcept {}
-
-} // namespace mongo
diff --git a/src/mongo/db/catalog/database.h b/src/mongo/db/catalog/database.h
index ea77cdb9a20..74ff3b6f42b 100644
--- a/src/mongo/db/catalog/database.h
+++ b/src/mongo/db/catalog/database.h
@@ -33,7 +33,6 @@
#include <memory>
#include <string>
-#include "mongo/base/shim.h"
#include "mongo/base/status.h"
#include "mongo/base/string_data.h"
#include "mongo/bson/bsonobj.h"
@@ -59,104 +58,17 @@ class Database : public Decorable<Database> {
public:
typedef StringMap<Collection*> CollectionMap;
- class Impl {
- public:
- virtual ~Impl() = 0;
-
- virtual void init(OperationContext* opCtx) = 0;
-
- virtual void close(OperationContext* opCtx, const std::string& reason) = 0;
-
- virtual const std::string& name() const = 0;
-
- virtual void clearTmpCollections(OperationContext* opCtx) = 0;
-
- virtual Status setProfilingLevel(OperationContext* opCtx, int newLevel) = 0;
-
- virtual int getProfilingLevel() const = 0;
-
- virtual const char* getProfilingNS() const = 0;
-
- virtual void setDropPending(OperationContext* opCtx, bool dropPending) = 0;
-
- virtual bool isDropPending(OperationContext* opCtx) const = 0;
-
- virtual void getStats(OperationContext* opCtx, BSONObjBuilder* output, double scale) = 0;
-
- virtual const DatabaseCatalogEntry* getDatabaseCatalogEntry() const = 0;
-
- virtual Status dropCollection(OperationContext* opCtx,
- StringData fullns,
- repl::OpTime dropOpTime) = 0;
- virtual Status dropCollectionEvenIfSystem(OperationContext* opCtx,
- const NamespaceString& fullns,
- repl::OpTime dropOpTime) = 0;
-
- virtual Status dropView(OperationContext* opCtx, StringData fullns) = 0;
-
- virtual Status userCreateNS(OperationContext* opCtx,
- const NamespaceString& fullns,
- CollectionOptions collectionOptions,
- bool createDefaultIndexes,
- const BSONObj& idIndex) = 0;
-
- virtual Collection* createCollection(OperationContext* opCtx,
- StringData ns,
- const CollectionOptions& options,
- bool createDefaultIndexes,
- const BSONObj& idIndex) = 0;
-
- virtual Status createView(OperationContext* opCtx,
- StringData viewName,
- const CollectionOptions& options) = 0;
-
- virtual Collection* getCollection(OperationContext* opCtx, StringData ns) const = 0;
-
- virtual ViewCatalog* getViewCatalog() = 0;
-
- virtual Collection* getOrCreateCollection(OperationContext* opCtx,
- const NamespaceString& nss) = 0;
-
- virtual Status renameCollection(OperationContext* opCtx,
- StringData fromNS,
- StringData toNS,
- bool stayTemp) = 0;
-
- virtual const std::string& getSystemViewsName() const = 0;
-
- virtual StatusWith<NamespaceString> makeUniqueCollectionNamespace(
- OperationContext* opCtx, StringData collectionNameModel) = 0;
-
- virtual void checkForIdIndexesAndDropPendingCollections(OperationContext* opCtx) = 0;
-
- virtual CollectionMap& collections() = 0;
- virtual const CollectionMap& collections() const = 0;
-
- virtual uint64_t epoch() const = 0;
- };
-
-public:
/**
* Creates the namespace 'ns' in the database 'db' according to 'options'. If
* 'createDefaultIndexes' is true, creates the _id index for the collection (and the system
* indexes, in the case of system collections). Creates the collection's _id index according
* to 'idIndex', if it is non-empty. When 'idIndex' is empty, creates the default _id index.
*/
- inline Status userCreateNS(OperationContext* opCtx,
- const NamespaceString& fullns,
- CollectionOptions collectionOptions,
- bool createDefaultIndexes = true,
- const BSONObj& idIndex = BSONObj()) {
- return this->_impl().userCreateNS(
- opCtx, fullns, std::move(collectionOptions), createDefaultIndexes, idIndex);
- }
-
- static MONGO_DECLARE_SHIM((Database * this_,
- StringData name,
- DatabaseCatalogEntry*,
- uint64_t epoch,
- PrivateTo<Database>)
- ->std::unique_ptr<Impl>) makeImpl;
+ virtual Status userCreateNS(OperationContext* opCtx,
+ const NamespaceString& fullns,
+ CollectionOptions collectionOptions,
+ bool createDefaultIndexes = true,
+ const BSONObj& idIndex = BSONObj()) = 0;
/**
* Iterating over a Database yields Collection* pointers.
@@ -203,44 +115,28 @@ public:
CollectionMap::const_iterator _it;
};
- explicit inline Database(const StringData name,
- DatabaseCatalogEntry* const dbEntry,
- uint64_t epoch)
- : _pimpl(makeImpl(this, name, dbEntry, epoch, PrivateCall<Database>{})) {}
+ Database() = default;
// must call close first
- inline ~Database() = default;
+ virtual ~Database() = default;
inline Database(Database&&) = delete;
inline Database& operator=(Database&&) = delete;
- inline iterator begin() const {
- return iterator(this->_impl().collections().begin());
- }
-
- inline iterator end() const {
- return iterator(this->_impl().collections().end());
- }
+ virtual iterator begin() const = 0;
+ virtual iterator end() const = 0;
/**
* Sets up internal memory structures.
*/
- inline void init(OperationContext* opCtx) {
- this->_impl().init(opCtx);
- }
+ virtual void init(OperationContext* opCtx) = 0;
// closes files and other cleanup see below.
- inline void close(OperationContext* const opCtx, const std::string& reason) {
- return this->_impl().close(opCtx, reason);
- }
+ virtual void close(OperationContext* const opCtx, const std::string& reason) = 0;
- inline const std::string& name() const {
- return this->_impl().name();
- }
+ virtual const std::string& name() const = 0;
- inline void clearTmpCollections(OperationContext* const opCtx) {
- return this->_impl().clearTmpCollections(opCtx);
- }
+ virtual void clearTmpCollections(OperationContext* const opCtx) = 0;
/**
* Sets a new profiling level for the database and returns the outcome.
@@ -248,17 +144,11 @@ public:
* @param opCtx Operation context which to use for creating the profiling collection.
* @param newLevel New profiling level to use.
*/
- inline Status setProfilingLevel(OperationContext* const opCtx, const int newLevel) {
- return this->_impl().setProfilingLevel(opCtx, newLevel);
- }
+ virtual Status setProfilingLevel(OperationContext* const opCtx, const int newLevel) = 0;
- inline int getProfilingLevel() const {
- return this->_impl().getProfilingLevel();
- }
+ virtual int getProfilingLevel() const = 0;
- inline const char* getProfilingNS() const {
- return this->_impl().getProfilingNS();
- }
+ virtual const char* getProfilingNS() const = 0;
/**
* Sets the 'drop-pending' state of this Database.
@@ -268,27 +158,19 @@ public:
* state.
* The database must be locked in MODE_X when calling this function.
*/
- inline void setDropPending(OperationContext* opCtx, bool dropPending) {
- this->_impl().setDropPending(opCtx, dropPending);
- }
+ virtual void setDropPending(OperationContext* opCtx, bool dropPending) = 0;
/**
* Returns the 'drop-pending' state of this Database.
* The database must be locked in MODE_X when calling this function.
*/
- inline bool isDropPending(OperationContext* opCtx) const {
- return this->_impl().isDropPending(opCtx);
- }
+ virtual bool isDropPending(OperationContext* opCtx) const = 0;
- inline void getStats(OperationContext* const opCtx,
- BSONObjBuilder* const output,
- const double scale = 1) {
- return this->_impl().getStats(opCtx, output, scale);
- }
+ virtual void getStats(OperationContext* const opCtx,
+ BSONObjBuilder* const output,
+ const double scale = 1) = 0;
- inline const DatabaseCatalogEntry* getDatabaseCatalogEntry() const {
- return this->_impl().getDatabaseCatalogEntry();
- }
+ virtual const DatabaseCatalogEntry* getDatabaseCatalogEntry() const = 0;
/**
* dropCollection() will refuse to drop system collections. Use dropCollectionEvenIfSystem() if
@@ -297,69 +179,47 @@ public:
* If we are applying a 'drop' oplog entry on a secondary, 'dropOpTime' will contain the optime
* of the oplog entry.
*/
- inline Status dropCollection(OperationContext* const opCtx,
- const StringData fullns,
- repl::OpTime dropOpTime = {}) {
- return this->_impl().dropCollection(opCtx, fullns, dropOpTime);
- }
- inline Status dropCollectionEvenIfSystem(OperationContext* const opCtx,
- const NamespaceString& fullns,
- repl::OpTime dropOpTime = {}) {
- return this->_impl().dropCollectionEvenIfSystem(opCtx, fullns, dropOpTime);
- }
-
- inline Status dropView(OperationContext* const opCtx, const StringData fullns) {
- return this->_impl().dropView(opCtx, fullns);
- }
-
- inline Collection* createCollection(OperationContext* const opCtx,
- StringData ns,
- const CollectionOptions& options = CollectionOptions(),
- const bool createDefaultIndexes = true,
- const BSONObj& idIndex = BSONObj()) {
- return this->_impl().createCollection(opCtx, ns, options, createDefaultIndexes, idIndex);
- }
-
- inline Status createView(OperationContext* const opCtx,
- const StringData viewName,
- const CollectionOptions& options) {
- return this->_impl().createView(opCtx, viewName, options);
- }
+ virtual Status dropCollection(OperationContext* const opCtx,
+ const StringData fullns,
+ repl::OpTime dropOpTime = {}) = 0;
+ virtual Status dropCollectionEvenIfSystem(OperationContext* const opCtx,
+ const NamespaceString& fullns,
+ repl::OpTime dropOpTime = {}) = 0;
+
+ virtual Status dropView(OperationContext* const opCtx, const StringData fullns) = 0;
+
+ virtual Collection* createCollection(OperationContext* const opCtx,
+ StringData ns,
+ const CollectionOptions& options = CollectionOptions(),
+ const bool createDefaultIndexes = true,
+ const BSONObj& idIndex = BSONObj()) = 0;
+
+ virtual Status createView(OperationContext* const opCtx,
+ const StringData viewName,
+ const CollectionOptions& options) = 0;
/**
* @param ns - this is fully qualified, which is maybe not ideal ???
*/
- inline Collection* getCollection(OperationContext* opCtx, const StringData ns) const {
- return this->_impl().getCollection(opCtx, ns);
- }
+ virtual Collection* getCollection(OperationContext* opCtx, const StringData ns) const = 0;
- inline Collection* getCollection(OperationContext* opCtx, const NamespaceString& ns) const {
- return this->_impl().getCollection(opCtx, ns.ns());
- }
+ virtual Collection* getCollection(OperationContext* opCtx, const NamespaceString& ns) const = 0;
/**
* Get the view catalog, which holds the definition for all views created on this database. You
* must be holding a database lock to use this accessor.
*/
- inline ViewCatalog* getViewCatalog() {
- return this->_impl().getViewCatalog();
- }
-
- inline Collection* getOrCreateCollection(OperationContext* const opCtx,
- const NamespaceString& nss) {
- return this->_impl().getOrCreateCollection(opCtx, nss);
- }
-
- inline Status renameCollection(OperationContext* const opCtx,
- const StringData fromNS,
- const StringData toNS,
- const bool stayTemp) {
- return this->_impl().renameCollection(opCtx, fromNS, toNS, stayTemp);
- }
-
- inline const std::string& getSystemViewsName() const {
- return this->_impl().getSystemViewsName();
- }
+ virtual ViewCatalog* getViewCatalog() = 0;
+
+ virtual Collection* getOrCreateCollection(OperationContext* const opCtx,
+ const NamespaceString& nss) = 0;
+
+ virtual Status renameCollection(OperationContext* const opCtx,
+ const StringData fromNS,
+ const StringData toNS,
+ const bool stayTemp) = 0;
+
+ virtual const std::string& getSystemViewsName() const = 0;
/**
* Generates a collection namespace suitable for creating a temporary collection.
@@ -371,19 +231,15 @@ public:
*
* The database must be locked in MODE_X when calling this function.
*/
- inline StatusWith<NamespaceString> makeUniqueCollectionNamespace(
- OperationContext* opCtx, StringData collectionNameModel) {
- return this->_impl().makeUniqueCollectionNamespace(opCtx, collectionNameModel);
- }
+ virtual StatusWith<NamespaceString> makeUniqueCollectionNamespace(
+ OperationContext* opCtx, StringData collectionNameModel) = 0;
/**
* If we are in a replset, every replicated collection must have an _id index. As we scan each
* database, we also gather a list of drop-pending collection namespaces for the
* DropPendingCollectionReaper to clean up eventually.
*/
- inline void checkForIdIndexesAndDropPendingCollections(OperationContext* opCtx) {
- return this->_impl().checkForIdIndexesAndDropPendingCollections(opCtx);
- }
+ virtual void checkForIdIndexesAndDropPendingCollections(OperationContext* opCtx) = 0;
/**
* A database is assigned a new epoch whenever it is closed and re-opened. This involves
@@ -396,33 +252,7 @@ public:
* For example, closing a database must kill all active queries against the database. This is
* implemented by checking that the epoch has not changed during query yield recovery.
*/
- inline uint64_t epoch() const {
- return this->_impl().epoch();
- }
-
-private:
- // This structure exists to give us a customization point to decide how to force users of this
- // class to depend upon the corresponding `database.cpp` Translation Unit (TU). All public
- // forwarding functions call `_impl(), and `_impl` creates an instance of this structure.
- struct TUHook {
- static void hook() noexcept;
-
- explicit inline TUHook() noexcept {
- if (kDebugBuild)
- this->hook();
- }
- };
-
- inline const Impl& _impl() const {
- TUHook{};
- return *this->_pimpl;
- }
-
- inline Impl& _impl() {
- TUHook{};
- return *this->_pimpl;
- }
-
- std::unique_ptr<Impl> _pimpl;
+ virtual uint64_t epoch() const = 0;
};
+
} // namespace mongo
diff --git a/src/mongo/db/catalog/database_holder_impl.cpp b/src/mongo/db/catalog/database_holder_impl.cpp
index 13992415498..660909b341e 100644
--- a/src/mongo/db/catalog/database_holder_impl.cpp
+++ b/src/mongo/db/catalog/database_holder_impl.cpp
@@ -37,8 +37,8 @@
#include "mongo/db/audit.h"
#include "mongo/db/background.h"
#include "mongo/db/catalog/collection_impl.h"
-#include "mongo/db/catalog/database.h"
#include "mongo/db/catalog/database_catalog_entry.h"
+#include "mongo/db/catalog/database_impl.h"
#include "mongo/db/catalog/namespace_uuid_cache.h"
#include "mongo/db/catalog/uuid_catalog.h"
#include "mongo/db/concurrency/write_conflict_exception.h"
@@ -168,7 +168,7 @@ Database* DatabaseHolderImpl::openDb(OperationContext* opCtx, StringData ns, boo
*justCreated = true;
}
- auto newDb = stdx::make_unique<Database>(dbname, entry, ++_epoch);
+ auto newDb = stdx::make_unique<DatabaseImpl>(dbname, entry, ++_epoch);
newDb->init(opCtx);
// Finally replace our nullptr entry with the new Database pointer.
diff --git a/src/mongo/db/catalog/database_impl.cpp b/src/mongo/db/catalog/database_impl.cpp
index 2ea1d12b612..eb869e6214a 100644
--- a/src/mongo/db/catalog/database_impl.cpp
+++ b/src/mongo/db/catalog/database_impl.cpp
@@ -80,15 +80,6 @@
#include "mongo/util/log.h"
namespace mongo {
-MONGO_REGISTER_SHIM(Database::makeImpl)
-(Database* const this_,
- const StringData name,
- DatabaseCatalogEntry* const dbEntry,
- uint64_t epoch,
- PrivateTo<Database>)
- ->std::unique_ptr<Database::Impl> {
- return stdx::make_unique<DatabaseImpl>(this_, name, dbEntry, epoch);
-}
namespace {
MONGO_FAIL_POINT_DEFINE(hangBeforeLoggingCreateCollection);
@@ -197,7 +188,7 @@ void DatabaseImpl::close(OperationContext* opCtx, const std::string& reason) {
invariant(opCtx->lockState()->isW());
// Clear cache of oplog Collection pointer.
- repl::oplogCheckCloseDatabase(opCtx, this->_this);
+ repl::oplogCheckCloseDatabase(opCtx, this);
for (auto&& pair : _collections) {
auto* coll = pair.second;
@@ -272,8 +263,7 @@ Collection* DatabaseImpl::_getOrCreateCollectionInstance(OperationContext* opCtx
return coll;
}
-DatabaseImpl::DatabaseImpl(Database* const this_,
- const StringData name,
+DatabaseImpl::DatabaseImpl(const StringData name,
DatabaseCatalogEntry* const dbEntry,
uint64_t epoch)
: _name(name.toString()),
@@ -281,9 +271,8 @@ DatabaseImpl::DatabaseImpl(Database* const this_,
_epoch(epoch),
_profileName(_name + ".system.profile"),
_viewsName(_name + "." + DurableViewCatalog::viewsCollectionName().toString()),
- _durableViews(DurableViewCatalogImpl(this_)),
- _views(&_durableViews),
- _this(this_) {}
+ _durableViews(DurableViewCatalogImpl(this)),
+ _views(&_durableViews) {}
void DatabaseImpl::init(OperationContext* const opCtx) {
Status status = validateDBName(_name);
@@ -370,7 +359,7 @@ Status DatabaseImpl::setProfilingLevel(OperationContext* opCtx, int newLevel) {
"the storage engine doesn't support profiling.");
}
- Status status = createProfileCollection(opCtx, this->_this);
+ Status status = createProfileCollection(opCtx, this);
if (!status.isOK()) {
return status;
diff --git a/src/mongo/db/catalog/database_impl.h b/src/mongo/db/catalog/database_impl.h
index 20cf3fb16e8..2130cdd9ce5 100644
--- a/src/mongo/db/catalog/database_impl.h
+++ b/src/mongo/db/catalog/database_impl.h
@@ -36,78 +36,15 @@
namespace mongo {
-/**
- * Represents a logical database containing Collections.
- *
- * The semantics for a const Database are that you can mutate individual collections but not add or
- * remove them.
- */
-class DatabaseImpl : public Database::Impl {
+class DatabaseImpl : public Database {
public:
- typedef StringMap<Collection*> CollectionMap;
-
- /**
- * Iterating over a Database yields Collection* pointers.
- */
- class iterator {
- public:
- using iterator_category = std::forward_iterator_tag;
- using value_type = Collection*;
- using pointer = const value_type*;
- using reference = const value_type&;
- using difference_type = ptrdiff_t;
-
- iterator() = default;
- iterator(CollectionMap::const_iterator it) : _it(it) {}
-
- reference operator*() const {
- return _it->second;
- }
-
- pointer operator->() const {
- return &_it->second;
- }
-
- bool operator==(const iterator& other) {
- return _it == other._it;
- }
-
- bool operator!=(const iterator& other) {
- return _it != other._it;
- }
-
- iterator& operator++() {
- ++_it;
- return *this;
- }
-
- iterator operator++(int) {
- auto oldPosition = *this;
- ++_it;
- return oldPosition;
- }
-
- private:
- CollectionMap::const_iterator _it;
- };
-
- explicit DatabaseImpl(Database* this_,
- StringData name,
- DatabaseCatalogEntry* dbEntry,
- uint64_t epoch);
+ explicit DatabaseImpl(StringData name, DatabaseCatalogEntry* dbEntry, uint64_t epoch);
// must call close first
~DatabaseImpl();
void init(OperationContext*) final;
- iterator begin() const {
- return iterator(_collections.begin());
- }
-
- iterator end() const {
- return iterator(_collections.end());
- }
// closes files and other cleanup see below.
void close(OperationContext* opCtx, const std::string& reason) final;
@@ -220,11 +157,12 @@ public:
void checkForIdIndexesAndDropPendingCollections(OperationContext* opCtx) final;
- inline CollectionMap& collections() final {
- return _collections;
+ iterator begin() const final {
+ return iterator(_collections.begin());
}
- inline const CollectionMap& collections() const final {
- return _collections;
+
+ iterator end() const final {
+ return iterator(_collections.end());
}
uint64_t epoch() const {
@@ -299,7 +237,6 @@ private:
DurableViewCatalogImpl _durableViews; // interface for system.views operations
ViewCatalog _views; // in-memory representation of _durableViews
- Database* _this; // Pointer to wrapper, for external caller compatibility.
};
} // namespace mongo
diff --git a/src/mongo/db/commands/SConscript b/src/mongo/db/commands/SConscript
index b601794f389..eabb2df44fa 100644
--- a/src/mongo/db/commands/SConscript
+++ b/src/mongo/db/commands/SConscript
@@ -283,7 +283,6 @@ env.Library(
LIBDEPS_PRIVATE=[
'$BUILD_DIR/mongo/db/catalog/catalog_helpers',
'$BUILD_DIR/mongo/db/catalog/collection',
- '$BUILD_DIR/mongo/db/catalog/database',
'$BUILD_DIR/mongo/db/commands',
'test_commands_enabled',
],
diff --git a/src/mongo/db/matcher/SConscript b/src/mongo/db/matcher/SConscript
index 444c2b6739e..275b275569c 100644
--- a/src/mongo/db/matcher/SConscript
+++ b/src/mongo/db/matcher/SConscript
@@ -166,7 +166,6 @@ env.Library(
'$BUILD_DIR/mongo/scripting/scripting_server',
'expressions',
'$BUILD_DIR/mongo/db/catalog/collection',
- '$BUILD_DIR/mongo/db/catalog/database',
'$BUILD_DIR/mongo/db/catalog/index_catalog',
'$BUILD_DIR/mongo/db/catalog_raii',
],
diff --git a/src/mongo/db/repl/SConscript b/src/mongo/db/repl/SConscript
index 969e653c0a7..69ef7c36fb3 100644
--- a/src/mongo/db/repl/SConscript
+++ b/src/mongo/db/repl/SConscript
@@ -117,7 +117,6 @@ env.Library(
'repl_coordinator_interface',
'$BUILD_DIR/mongo/base',
'$BUILD_DIR/mongo/db/background',
- '$BUILD_DIR/mongo/db/catalog/database',
'$BUILD_DIR/mongo/db/cloner',
'$BUILD_DIR/mongo/db/concurrency/lock_manager',
'$BUILD_DIR/mongo/db/db_raii',
@@ -212,7 +211,6 @@ env.Library(
'$BUILD_DIR/mongo/base',
'$BUILD_DIR/mongo/idl/idl_parser',
'$BUILD_DIR/mongo/db/catalog/collection_options',
- '$BUILD_DIR/mongo/db/catalog/database',
'$BUILD_DIR/mongo/db/catalog/health_log',
'$BUILD_DIR/mongo/db/db_raii',
],
@@ -485,7 +483,6 @@ env.Library(
'oplog_interface_local.cpp',
],
LIBDEPS=[
- '$BUILD_DIR/mongo/db/catalog/database',
'$BUILD_DIR/mongo/db/db_raii',
'$BUILD_DIR/mongo/db/query_exec',
],