summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2014-11-24 15:03:19 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2014-12-15 17:20:39 -0500
commitc052295f3eb8081db74be4f1e4ff48f02085a9f8 (patch)
treeb7d5a95e6efa0a9e764bf51ca3725d3c8213191f
parentab70613187b0f2c1488a4fe6750b2f51da278afb (diff)
downloadmongo-c052295f3eb8081db74be4f1e4ff48f02085a9f8.tar.gz
SERVER-16186: newCollectionsUsePowerOf2Sizes should warn users it no longer works
-rw-r--r--jstests/mmap_v1/use_power_of_2_a.js4
-rw-r--r--jstests/tool/dumprestoreWithNoOptions.js14
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp38
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 ) {