summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp')
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp b/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
index e219c5cf765..d9872b170b2 100644
--- a/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
+++ b/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
@@ -43,12 +43,12 @@
#include "mongo/db/index/hash_access_method.h"
#include "mongo/db/index/haystack_access_method.h"
#include "mongo/db/index/s2_access_method.h"
-#include "mongo/db/pdfile_version.h"
#include "mongo/db/server_parameters.h"
#include "mongo/db/storage/mmap_v1/btree/btree_interface.h"
#include "mongo/db/storage/mmap_v1/catalog/namespace_details.h"
#include "mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.h"
#include "mongo/db/storage/mmap_v1/catalog/namespace_details_rsv1_metadata.h"
+#include "mongo/db/storage/mmap_v1/dur.h"
#include "mongo/db/storage/mmap_v1/data_file.h"
#include "mongo/db/storage/mmap_v1/dur_recovery_unit.h"
#include "mongo/db/storage/mmap_v1/record_store_v1_capped.h"
@@ -170,6 +170,13 @@ namespace mongo {
}
}
}
+
+ DataFileVersion version = _extentManager.getFileFormat(txn);
+ if (version.isCompatibleWithCurrentCode() && !version.mayHave28Freelist()) {
+ // Any DB that can be opened and written to gets this flag set.
+ version.setMayHave28Freelist();
+ _extentManager.setFileFormat(txn, version);
+ }
}
wunit.commit();
@@ -435,13 +442,11 @@ namespace mongo {
{
- int major = 0;
- int minor = 0;
- _extentManager.getFileFormat( opCtx, &major, &minor );
+ const DataFileVersion version = _extentManager.getFileFormat(opCtx);
BSONObjBuilder dataFileVersion( output->subobjStart( "dataFileVersion" ) );
- dataFileVersion.append( "major", major );
- dataFileVersion.append( "minor", minor );
+ dataFileVersion.append( "major", version.major() );
+ dataFileVersion.append( "minor", version.minorRaw() );
dataFileVersion.done();
}
}
@@ -452,40 +457,33 @@ namespace mongo {
if ( _extentManager.numFiles() == 0 )
return false;
- int major = 0;
- int minor = 0;
-
- _extentManager.getFileFormat( opCtx, &major, &minor );
+ const DataFileVersion version = _extentManager.getFileFormat(opCtx);
- invariant( major == PDFILE_VERSION );
+ invariant(version.isCompatibleWithCurrentCode());
- return minor == PDFILE_VERSION_MINOR_22_AND_OLDER;
+ return !version.is24IndexClean();
}
void MMAPV1DatabaseCatalogEntry::markIndexSafe24AndUp( OperationContext* opCtx ) {
if ( _extentManager.numFiles() == 0 )
return;
- int major = 0;
- int minor = 0;
+ DataFileVersion version = _extentManager.getFileFormat(opCtx);
- _extentManager.getFileFormat( opCtx, &major, &minor );
-
- invariant( major == PDFILE_VERSION );
-
- if ( minor == PDFILE_VERSION_MINOR_24_AND_NEWER )
- return;
+ invariant(version.isCompatibleWithCurrentCode());
- invariant( minor == PDFILE_VERSION_MINOR_22_AND_OLDER );
+ if (version.is24IndexClean())
+ return; // nothing to do
- _extentManager.setFileFormat(opCtx, major, PDFILE_VERSION_MINOR_24_AND_NEWER);
+ version.setIs24IndexClean();
+ _extentManager.setFileFormat(opCtx, version);
}
bool MMAPV1DatabaseCatalogEntry::currentFilesCompatible( OperationContext* opCtx ) const {
if ( _extentManager.numFiles() == 0 )
return true;
- return _extentManager.getOpenFile( 0 )->getHeader()->isCurrentVersion();
+ return _extentManager.getOpenFile( 0 )->getHeader()->version.isCompatibleWithCurrentCode();
}
void MMAPV1DatabaseCatalogEntry::getCollectionNamespaces( std::list<std::string>* tofill ) const {