summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiangyu Yao <xiangyu.yao@mongodb.com>2018-11-28 19:12:16 -0500
committerXiangyu Yao <xiangyu.yao@mongodb.com>2019-02-25 20:52:55 -0500
commit2fabf81388ce6175af7cd27145ff8cabba2950df (patch)
tree3f32bcbeca5cd5d9096274e67a9923cead639ecd
parent698410ce76f2b802227dfe633d7065ecd1f62678 (diff)
downloadmongo-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.cpp7
-rw-r--r--src/mongo/db/storage/kv/kv_catalog.cpp8
-rw-r--r--src/mongo/db/storage/kv/kv_catalog.h2
-rw-r--r--src/mongo/db/storage/kv/kv_storage_engine.cpp4
-rw-r--r--src/mongo/db/storage/kv/kv_storage_engine.h2
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_engine.cpp9
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_engine.h2
-rw-r--r--src/mongo/db/storage/storage_engine.h5
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