summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2015-02-26 15:42:15 -0500
committerRamon Fernandez <ramon@mongodb.com>2015-03-04 12:43:52 -0500
commite1adb14bb593e22203d82018f4ba78c77aa289b3 (patch)
tree1b904c8a180619a9307777cb314d8230dea24a38
parent7a079105cb1bf18359c1f4e87ad27e502db7b54f (diff)
downloadmongo-e1adb14bb593e22203d82018f4ba78c77aa289b3.tar.gz
SERVER-17388/SERVER-16776 If closing unopened file, do not check for journal writes
(cherry picked from commit a9f240048fe27d925c0ad1798c1bf29ce59f0acc)
-rw-r--r--src/mongo/db/storage/mmap_v1/data_file.cpp10
-rw-r--r--src/mongo/db/storage/mmap_v1/durable_mapped_file.cpp16
2 files changed, 18 insertions, 8 deletions
diff --git a/src/mongo/db/storage/mmap_v1/data_file.cpp b/src/mongo/db/storage/mmap_v1/data_file.cpp
index 0144f71b74e..8b7fed7f106 100644
--- a/src/mongo/db/storage/mmap_v1/data_file.cpp
+++ b/src/mongo/db/storage/mmap_v1/data_file.cpp
@@ -173,12 +173,14 @@ namespace {
}
{
- verify( _mb == 0 );
+ invariant(_mb == 0);
unsigned long long sz = size;
- if( mmf.create(filename, sz, false) )
+ if (mmf.create(filename, sz, false)) {
_mb = mmf.getView();
- verify( sz <= 0x7fffffff );
- size = (int) sz;
+ }
+
+ invariant(sz <= 0x7fffffff);
+ size = (int)sz;
}
data_file_check(_mb);
diff --git a/src/mongo/db/storage/mmap_v1/durable_mapped_file.cpp b/src/mongo/db/storage/mmap_v1/durable_mapped_file.cpp
index 0efb27c7800..3a2d2b2db9a 100644
--- a/src/mongo/db/storage/mmap_v1/durable_mapped_file.cpp
+++ b/src/mongo/db/storage/mmap_v1/durable_mapped_file.cpp
@@ -247,6 +247,8 @@ namespace mongo {
bool DurableMappedFile::open(const std::string& fname, bool sequentialHint) {
LOG(3) << "mmf open " << fname;
+ invariant(!_view_write);
+
setPath(fname);
_view_write = mapWithOptions(fname.c_str(), sequentialHint ? SEQUENTIAL : 0);
return finishOpening();
@@ -254,6 +256,8 @@ namespace mongo {
bool DurableMappedFile::create(const std::string& fname, unsigned long long& len, bool sequentialHint) {
LOG(3) << "mmf create " << fname;
+ invariant(!_view_write);
+
setPath(fname);
_view_write = map(fname.c_str(), len, sequentialHint ? SEQUENTIAL : 0);
return finishOpening();
@@ -284,15 +288,19 @@ namespace mongo {
}
DurableMappedFile::~DurableMappedFile() {
- try {
+ try {
LOG(3) << "mmf close " << filename();
- // Notify the durability system that we are closing a file.
- getDur().closingFileNotification();
+ // If _view_private was not set, this means file open failed
+ if (_view_private) {
+ // Notify the durability system that we are closing a file so it can ensure we
+ // will not have journaled operations with no corresponding file.
+ getDur().closingFileNotification();
+ }
LockMongoFilesExclusive lk;
privateViews.remove(_view_private, length());
- _view_write = _view_private = 0;
+
MemoryMappedFile::close();
}
catch (...) {