diff options
Diffstat (limited to 'src/mongo/util/paths.h')
| -rw-r--r-- | src/mongo/util/paths.h | 43 |
1 files changed, 9 insertions, 34 deletions
diff --git a/src/mongo/util/paths.h b/src/mongo/util/paths.h index c75a7e4f737..c103ae22635 100644 --- a/src/mongo/util/paths.h +++ b/src/mongo/util/paths.h @@ -18,19 +18,20 @@ #pragma once -#include "mongoutils/str.h" +#include <boost/filesystem/path.hpp> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> -#include <boost/filesystem/path.hpp> +#include "mongo/util/log.h" +#include "mongo/util/mongoutils/str.h" + +#include "mongo/db/storage_options.h" namespace mongo { using namespace mongoutils; - extern string dbpath; - /** this is very much like a boost::path. however, we define a new type to get some type checking. if you want to say 'my param MUST be a relative path", use this. */ @@ -47,18 +48,15 @@ namespace mongo { /** from a full path */ static RelativePath fromFullPath(boost::filesystem::path f) { - boost::filesystem::path dbp(dbpath); // normalizes / and backslash + boost::filesystem::path dbp(storageGlobalParams.dbpath); // normalizes / and backslash string fullpath = f.string(); string relative = str::after(fullpath, dbp.string()); if( relative.empty() ) { - log() << "warning file is not under db path? " << fullpath << ' ' << dbp.string() << endl; + log() << "warning file is not under db path? " << fullpath << ' ' << dbp.string(); RelativePath rp; rp._p = fullpath; return rp; } - /*uassert(13600, - str::stream() << "file path is not under the db path? " << fullpath << ' ' << dbpath, - relative != fullpath);*/ if( str::startsWith(relative, "/") || str::startsWith(relative, "\\") ) { relative.erase(0, 1); } @@ -74,7 +72,7 @@ namespace mongo { bool operator<(const RelativePath& r) const { return _p < r._p; } string asFullPath() const { - boost::filesystem::path x(dbpath); + boost::filesystem::path x(storageGlobalParams.dbpath); x /= _p; return x.string(); } @@ -98,30 +96,7 @@ namespace mongo { return dev1 == dev2; } - inline void flushMyDirectory(const boost::filesystem::path& file){ -#ifdef __linux__ // this isn't needed elsewhere - // if called without a fully qualified path it asserts; that makes mongoperf fail. so make a warning. need a better solution longer term. - // massert(13652, str::stream() << "Couldn't find parent dir for file: " << file.string(), ); - if( !file.has_branch_path() ) { - log() << "warning flushMYDirectory couldn't find parent dir for file: " << file.string() << endl; - return; - } - - - boost::filesystem::path dir = file.branch_path(); // parent_path in new boosts - - LOG(1) << "flushing directory " << dir.string() << endl; - - int fd = ::open(dir.string().c_str(), O_RDONLY); // DO NOT THROW OR ASSERT BEFORE CLOSING - massert(13650, str::stream() << "Couldn't open directory '" << dir.string() << "' for flushing: " << errnoWithDescription(), fd >= 0); - if (fsync(fd) != 0){ - int e = errno; - close(fd); - massert(13651, str::stream() << "Couldn't fsync directory '" << dir.string() << "': " << errnoWithDescription(e), false); - } - close(fd); -#endif - } + void flushMyDirectory(const boost::filesystem::path& file); boost::filesystem::path ensureParentDirCreated(const boost::filesystem::path& p); |
