diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-11-24 15:03:19 -0500 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-12-15 17:20:39 -0500 |
commit | c052295f3eb8081db74be4f1e4ff48f02085a9f8 (patch) | |
tree | b7d5a95e6efa0a9e764bf51ca3725d3c8213191f | |
parent | ab70613187b0f2c1488a4fe6750b2f51da278afb (diff) | |
download | mongo-c052295f3eb8081db74be4f1e4ff48f02085a9f8.tar.gz |
SERVER-16186: newCollectionsUsePowerOf2Sizes should warn users it no longer works
-rw-r--r-- | jstests/mmap_v1/use_power_of_2_a.js | 4 | ||||
-rw-r--r-- | jstests/tool/dumprestoreWithNoOptions.js | 14 | ||||
-rw-r--r-- | src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp | 38 |
3 files changed, 46 insertions, 10 deletions
diff --git a/jstests/mmap_v1/use_power_of_2_a.js b/jstests/mmap_v1/use_power_of_2_a.js index 99dee43b173..a1cd48bd2b6 100644 --- a/jstests/mmap_v1/use_power_of_2_a.js +++ b/jstests/mmap_v1/use_power_of_2_a.js @@ -30,8 +30,4 @@ assert.eq(db.adminCommand({getParameter:1, newCollectionsUsePowerOf2Sizes: true}).newCollectionsUsePowerOf2Sizes, true); test(1); -assert.commandWorked(db.adminCommand({setParameter:1, newCollectionsUsePowerOf2Sizes: false})); -test(0); -// reset the server to default value -assert.commandWorked(db.adminCommand({setParameter:1, newCollectionsUsePowerOf2Sizes: true})); diff --git a/jstests/tool/dumprestoreWithNoOptions.js b/jstests/tool/dumprestoreWithNoOptions.js index ecb3591a190..d9a4731b5c0 100644 --- a/jstests/tool/dumprestoreWithNoOptions.js +++ b/jstests/tool/dumprestoreWithNoOptions.js @@ -23,6 +23,14 @@ dbname2 = "NOT_"+dbname; db.dropDatabase(); +// MMapV1 always sets newcollectionsusepowerof2sizes, WT does not +defaultFlags = { "flags" : 1 } +var ss = db.serverStatus(); + +if (ss.storageEngine.name != "mmapv1") { + defaultFlags = {}; +} + var options = { capped: true, size: 4096, autoIndexId: true }; db.createCollection('capped', options); assert.eq( 1, db.capped.getIndexes().length, "auto index not created" ); @@ -45,7 +53,7 @@ t.runTool( "restore" , "--dir" , t.ext , "--noOptionsRestore"); assert.eq( 1, db.capped.count() , "wrong number of docs restored to capped" ); assert(true !== db.capped.stats().capped, "restore options were not ignored"); -assert.eq( {}, db.capped.exists().options, +assert.eq( defaultFlags, db.capped.exists().options, "restore options not ignored: " + tojson( db.capped.exists() ) ); // Dump/restore single DB @@ -74,7 +82,7 @@ db = db.getSiblingDB(dbname2); assert.eq( 1, db.capped.count() , "wrong number of docs restored to capped" ); assert(true !== db.capped.stats().capped, "restore options were not ignored"); -assert.eq( {}, db.capped.exists().options, +assert.eq( defaultFlags, db.capped.exists().options, "restore options not ignored: " + tojson( db.capped.exists() ) ); // Dump/restore single collection @@ -106,7 +114,7 @@ db = db.getSiblingDB(dbname); assert.eq( 1, db.capped.count() , "wrong number of docs restored to capped" ); assert( true !== db.capped.stats().capped, "restore options were not ignored" ); -assert.eq( {}, db.capped.exists().options, +assert.eq( defaultFlags, db.capped.exists().options, "restore options not ignored: " + tojson( db.capped.exists() ) ); t.stop(); 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 0fe029516f5..8febc2bb83a 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 @@ -58,7 +58,37 @@ namespace mongo { - MONGO_EXPORT_SERVER_PARAMETER(newCollectionsUsePowerOf2Sizes, bool, true); + namespace { + bool newCollectionsUsePowerOf2SizesFlag = true; // Unused, needed for server parameter. + + /** + * Declaration for the "newCollectionsUsePowerOf2Sizes" server parameter, + * which is now deprecated in 2.8. + * Note that: + * - setting to true performs a no-op. + * - setting to false will fail. + */ + class NewCollectionsUsePowerOf2SizesParameter : public ExportedServerParameter<bool> { + public: + NewCollectionsUsePowerOf2SizesParameter() : + ExportedServerParameter<bool>(ServerParameterSet::getGlobal(), + "newCollectionsUsePowerOf2Sizes", + &newCollectionsUsePowerOf2SizesFlag, + true, + true) {} + + virtual Status validate(const bool& potentialNewValue) { + if (!potentialNewValue) { + return Status(ErrorCodes::BadValue, + "newCollectionsUsePowerOf2Sizes cannot be set to false. " + "Use noPadding instead during createCollection."); + } + + return Status::OK(); + } + + } exportedNewCollectionsUsePowerOf2SizesParameter; + } /** * Registers the insertion of a new entry in the _collections cache with the RecoveryUnit, @@ -618,8 +648,10 @@ namespace mongo { if ( options.flagsSet ) { md.setUserFlag( txn, options.flags ); } - else if ( newCollectionsUsePowerOf2Sizes ) { - md.setUserFlag( txn, NamespaceDetails::Flag_UsePowerOf2Sizes ); + else { + // For compatibility with previous versions if the user sets no flags, + // we set Flag_UsePowerOf2Sizes in case the user downgrades + md.setUserFlag(txn, NamespaceDetails::Flag_UsePowerOf2Sizes); } } else if ( options.cappedMaxDocs > 0 ) { |