diff options
Diffstat (limited to 'src/mongo/db/storage/paths.cpp')
-rw-r--r-- | src/mongo/db/storage/paths.cpp | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/src/mongo/db/storage/paths.cpp b/src/mongo/db/storage/paths.cpp index cb2913c6b06..2f6fb4d4a77 100644 --- a/src/mongo/db/storage/paths.cpp +++ b/src/mongo/db/storage/paths.cpp @@ -35,79 +35,79 @@ namespace mongo { - /** from a full path */ - RelativePath RelativePath::fromFullPath(boost::filesystem::path dbp, - boost::filesystem::path f) { - // filesystem::path normalizes / and backslash - std::string fullpath = f.string(); - std::string relative = str::after(fullpath, dbp.string()); - if( relative.empty() ) { - log() << "warning file is not under db path? " << fullpath << ' ' << dbp.string(); - RelativePath rp; - rp._p = fullpath; - return rp; - } - if( str::startsWith(relative, "/") || str::startsWith(relative, "\\") ) { - relative.erase(0, 1); - } +/** from a full path */ +RelativePath RelativePath::fromFullPath(boost::filesystem::path dbp, boost::filesystem::path f) { + // filesystem::path normalizes / and backslash + std::string fullpath = f.string(); + std::string relative = str::after(fullpath, dbp.string()); + if (relative.empty()) { + log() << "warning file is not under db path? " << fullpath << ' ' << dbp.string(); RelativePath rp; - rp._p = relative; + rp._p = fullpath; return rp; } + if (str::startsWith(relative, "/") || str::startsWith(relative, "\\")) { + relative.erase(0, 1); + } + RelativePath rp; + rp._p = relative; + return rp; +} - dev_t getPartition(const std::string& path){ - struct stat stats; - - if (stat(path.c_str(), &stats) != 0){ - uasserted(13646, str::stream() << "stat() failed for file: " << path << " " << errnoWithDescription()); - } +dev_t getPartition(const std::string& path) { + struct stat stats; - return stats.st_dev; + if (stat(path.c_str(), &stats) != 0) { + uasserted(13646, + str::stream() << "stat() failed for file: " << path << " " + << errnoWithDescription()); } - void flushMyDirectory(const boost::filesystem::path& file) { -#ifdef __linux__ // this isn't needed elsewhere - static bool _warnedAboutFilesystem = false; - // 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(); - return; - } + return stats.st_dev; +} + +void flushMyDirectory(const boost::filesystem::path& file) { +#ifdef __linux__ // this isn't needed elsewhere + static bool _warnedAboutFilesystem = false; + // 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(); + return; + } - boost::filesystem::path dir = file.branch_path(); // parent_path in new boosts + boost::filesystem::path dir = file.branch_path(); // parent_path in new boosts - LOG(1) << "flushing directory " << dir.string(); + LOG(1) << "flushing directory " << dir.string(); - 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; - if (e == EINVAL) { // indicates filesystem does not support synchronization - if (!_warnedAboutFilesystem) { - log() << "\tWARNING: This file system is not supported. For further information" - << " see:" - << startupWarningsLog; - log() << "\t\t\thttp://dochub.mongodb.org/core/unsupported-filesystems" - << startupWarningsLog; - log() << "\t\tPlease notify MongoDB, Inc. if an unlisted filesystem generated " - << "this warning." << startupWarningsLog; - _warnedAboutFilesystem = true; - } - } - else { - close(fd); - massert(13651, str::stream() << "Couldn't fsync directory '" << dir.string() - << "': " << errnoWithDescription(e), - false); + 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; + if (e == EINVAL) { // indicates filesystem does not support synchronization + if (!_warnedAboutFilesystem) { + log() << "\tWARNING: This file system is not supported. For further information" + << " see:" << startupWarningsLog; + log() << "\t\t\thttp://dochub.mongodb.org/core/unsupported-filesystems" + << startupWarningsLog; + log() << "\t\tPlease notify MongoDB, Inc. if an unlisted filesystem generated " + << "this warning." << startupWarningsLog; + _warnedAboutFilesystem = true; } + } else { + close(fd); + massert(13651, + str::stream() << "Couldn't fsync directory '" << dir.string() + << "': " << errnoWithDescription(e), + false); } - close(fd); -#endif } + close(fd); +#endif +} } |