diff options
author | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2018-11-28 19:12:16 -0500 |
---|---|---|
committer | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2019-02-25 20:52:55 -0500 |
commit | 2fabf81388ce6175af7cd27145ff8cabba2950df (patch) | |
tree | 3f32bcbeca5cd5d9096274e67a9923cead639ecd | |
parent | 698410ce76f2b802227dfe633d7065ecd1f62678 (diff) | |
download | mongo-2fabf81388ce6175af7cd27145ff8cabba2950df.tar.gz |
SERVER-35732 Fix dbStats.fsUsedSize behavior for database with hyphenated names
(cherry picked from commit e0be8ba5aa04df21f6a9a42578a349a4c303776d)
-rw-r--r-- | src/mongo/db/catalog/database_impl.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_catalog.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_catalog.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_storage_engine.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_storage_engine.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/storage/mmap_v1/mmap_v1_engine.h | 2 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_engine.h | 5 |
8 files changed, 34 insertions, 5 deletions
diff --git a/src/mongo/db/catalog/database_impl.cpp b/src/mongo/db/catalog/database_impl.cpp index 9a7cc365830..bbc524e0bcd 100644 --- a/src/mongo/db/catalog/database_impl.cpp +++ b/src/mongo/db/catalog/database_impl.cpp @@ -421,11 +421,8 @@ void DatabaseImpl::getStats(OperationContext* opCtx, BSONObjBuilder* output, dou _dbEntry->appendExtraStats(opCtx, output, scale); if (!opCtx->getServiceContext()->getStorageEngine()->isEphemeral()) { - boost::filesystem::path dbpath(storageGlobalParams.dbpath); - if (storageGlobalParams.directoryperdb) { - dbpath /= _name; - } - + boost::filesystem::path dbpath( + opCtx->getServiceContext()->getStorageEngine()->getFilesystemPathForDb(_name)); boost::system::error_code ec; boost::filesystem::space_info spaceInfo = boost::filesystem::space(dbpath, ec); if (!ec) { diff --git a/src/mongo/db/storage/kv/kv_catalog.cpp b/src/mongo/db/storage/kv/kv_catalog.cpp index ec1d09685ca..4f0ab952980 100644 --- a/src/mongo/db/storage/kv/kv_catalog.cpp +++ b/src/mongo/db/storage/kv/kv_catalog.cpp @@ -340,6 +340,14 @@ bool KVCatalog::_hasEntryCollidingWithRand() const { return false; } +std::string KVCatalog::getFilesystemPathForDb(const std::string& dbName) const { + if (_directoryPerDb) { + return storageGlobalParams.dbpath + '/' + escapeDbName(dbName); + } else { + return storageGlobalParams.dbpath; + } +} + std::string KVCatalog::_newUniqueIdent(StringData ns, const char* kind) { // If this changes to not put _rand at the end, _hasEntryCollidingWithRand will need fixing. StringBuilder buf; diff --git a/src/mongo/db/storage/kv/kv_catalog.h b/src/mongo/db/storage/kv/kv_catalog.h index 2bf2af72831..94a5cc80c83 100644 --- a/src/mongo/db/storage/kv/kv_catalog.h +++ b/src/mongo/db/storage/kv/kv_catalog.h @@ -113,6 +113,8 @@ public: */ StatusWith<std::string> newOrphanedIdent(OperationContext* opCtx, std::string ident); + std::string getFilesystemPathForDb(const std::string& dbName) const; + private: class AddIdentChange; class RemoveIdentChange; diff --git a/src/mongo/db/storage/kv/kv_storage_engine.cpp b/src/mongo/db/storage/kv/kv_storage_engine.cpp index ad18b2cccfc..59b75d2a292 100644 --- a/src/mongo/db/storage/kv/kv_storage_engine.cpp +++ b/src/mongo/db/storage/kv/kv_storage_engine.cpp @@ -454,6 +454,10 @@ KVStorageEngine::reconcileCatalogAndIdents(OperationContext* opCtx) { return ret; } +std::string KVStorageEngine::getFilesystemPathForDb(const std::string& dbName) const { + return _catalog->getFilesystemPathForDb(dbName); +} + void KVStorageEngine::cleanShutdown() { for (DBMap::const_iterator it = _dbs.begin(); it != _dbs.end(); ++it) { delete it->second; diff --git a/src/mongo/db/storage/kv/kv_storage_engine.h b/src/mongo/db/storage/kv/kv_storage_engine.h index bf0e947ab94..b1e1fbf11a1 100644 --- a/src/mongo/db/storage/kv/kv_storage_engine.h +++ b/src/mongo/db/storage/kv/kv_storage_engine.h @@ -170,6 +170,8 @@ public: StatusWith<std::vector<StorageEngine::CollectionIndexNamePair>> reconcileCatalogAndIdents( OperationContext* opCtx) override; + std::string getFilesystemPathForDb(const std::string& dbName) const override; + /** * When loading after an unclean shutdown, this performs cleanup on the KVCatalog and unsets the * startingAfterUncleanShutdown decoration on the global ServiceContext. diff --git a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp index 8e0ffa87f39..01c6848a6a3 100644 --- a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp +++ b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp @@ -419,4 +419,13 @@ void MMAPV1Engine::cleanShutdown() { void MMAPV1Engine::setJournalListener(JournalListener* jl) { dur::setJournalListener(jl); } + +std::string MMAPV1Engine::getFilesystemPathForDb(const std::string& dbName) const { + if (storageGlobalParams.directoryperdb) { + return storageGlobalParams.dbpath + '/' + dbName; + } else { + return storageGlobalParams.dbpath; + } +} + } // namespace mongo diff --git a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h index 8e77289fe95..55b00445134 100644 --- a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h +++ b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h @@ -110,6 +110,8 @@ public: MONGO_UNREACHABLE; } + std::string getFilesystemPathForDb(const std::string& dbName) const override; + private: static void _listDatabases(const std::string& directory, std::vector<std::string>* out); diff --git a/src/mongo/db/storage/storage_engine.h b/src/mongo/db/storage/storage_engine.h index a910fdc8fd4..416ec1b95bc 100644 --- a/src/mongo/db/storage/storage_engine.h +++ b/src/mongo/db/storage/storage_engine.h @@ -424,6 +424,11 @@ public: * implementation. */ virtual Timestamp getAllCommittedTimestamp() const = 0; + + /** + * Returns the path to the directory which has the data files of database with `dbName`. + */ + virtual std::string getFilesystemPathForDb(const std::string& dbName) const = 0; }; } // namespace mongo |