summaryrefslogtreecommitdiff
path: root/src/mongo/util/paths.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/paths.h')
-rw-r--r--src/mongo/util/paths.h43
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);