summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatt dannenberg <matt.dannenberg@10gen.com>2014-09-08 13:25:47 -0400
committermatt dannenberg <matt.dannenberg@10gen.com>2014-09-10 08:14:26 -0400
commit7f085a7cd723ca6045e430d367e592879d92d994 (patch)
tree812871db10af0ad3b2fd39784ae7ba0bca74cdcf
parent4d33f84dda05fa9b72e1b1b50d1cfcae13e36470 (diff)
downloadmongo-7f085a7cd723ca6045e430d367e592879d92d994.tar.gz
SERVER-15156 skip _id index checks on the config db in the upgradeChecker()
(cherry picked from commit 4da87914c4ad2b3ca34cd0008a57faa2c068db85)
-rw-r--r--jstests/multiVersion/upgrade_checker_checker.js45
-rw-r--r--src/mongo/shell/upgrade_check.js3
2 files changed, 44 insertions, 4 deletions
diff --git a/jstests/multiVersion/upgrade_checker_checker.js b/jstests/multiVersion/upgrade_checker_checker.js
index fba24974f53..2759e7c6f3c 100644
--- a/jstests/multiVersion/upgrade_checker_checker.js
+++ b/jstests/multiVersion/upgrade_checker_checker.js
@@ -7,9 +7,11 @@ var port = allocatePorts(1)[0];
var mongodSource = MongoRunner.runMongod({binVersion : "2.0", port: port});
var dbName = "upgradeCheckerChecker";
var sourceDB = mongodSource.getDB(dbName);
+var configDB = mongodSource.getDB("config");
+var localDB = mongodSource.getDB("local");
// build up a string of what is to be run in the 2.0 shell
-var evalStr = "db=db.getSiblingDB('" + dbName + "'); db.dropDatabase();";
+var evalStr = "db = db.getSiblingDB('" + dbName + "'); db.dropDatabase();";
// no _id index
evalStr += 'db.createCollection("cappedNoIdIndex", {capped: true, size: 10000});';
@@ -30,12 +32,12 @@ evalStr += 'db.baddoc2.ensureIndex({a:1});';
evalStr += 'db.baddoc2.insert({a: new Array(1056).toString()});';
// bad document field name .
-evalStr += 'db.baddoc3._validateForStorage =function() {};';
+evalStr += 'db.baddoc3._validateForStorage = function() {};';
evalStr += 'db.baddoc3._validateObject = function() {};';
evalStr += 'db.baddoc3.insert({asdf:{"r.e.d":1}});';
// bad document field name $
-evalStr += 'db.baddoc4._validateForStorage =function() {};';
+evalStr += 'db.baddoc4._validateForStorage = function() {};';
evalStr += 'db.baddoc4._validateObject = function() {};';
evalStr += 'db.baddoc4.insert({asdf:{"$red":1}});';
@@ -56,6 +58,39 @@ evalStr += 'db.good3.ensureIndex({asdfasdfasdfasdfasdfasdfasdf:1, basdfadfasdfas
'easdfasdfasdfasdfasdfasdfasdf:1, fasdfasdfasdfasdfasdfasdfasd:1,' +
'gasdfasdfasdfasdfasdfasdfasdf:1, hasdfadsfasdfasdfasdfadsfas:1});';
+// ensure lack of _id index is not a problem in system collections (containing $ or system.)
+evalStr += 'db.createCollection("$cappedNoIdIndex", {capped: true, size: 10000});';
+evalStr += 'db.createCollection("system.cappedNoIdIndex", {capped: true, size: 10000});';
+// ensure bad document checks are not run on system collections (containing $ or beginning system.)
+evalStr += 'db.$cappedNoIdIndex._validateForStorage = function() {};';
+evalStr += 'db.$cappedNoIdIndex._validateObject = function() {};';
+evalStr += 'db.$cappedNoIdIndex.insert({asdf:{"r.e.d":1}});';
+evalStr += 'db.system.cappedNoIdIndex._validateForStorage = function() {};';
+evalStr += 'db.system.cappedNoIdIndex._validateObject = function() {};';
+evalStr += 'db.system.cappedNoIdIndex.insert({asdf:{"r.e.d":1}});';
+
+// ensure lack of _id index is not a problem in collections in config database
+evalStr += 'db = db.getSiblingDB("config");';
+evalStr += 'db.createCollection("cappedNoIdIndex", {capped: true, size: 10000});';
+// ensure bad document checks are not run on config database
+evalStr += 'db.coll._validateForStorage = function() {};';
+evalStr += 'db.coll._validateObject = function() {};';
+evalStr += 'db.coll.insert({asdf:{"r.e.d":1}});';
+
+
+// ensure lack of _id index is not a problem in local.oplog.* or local.startup_log
+evalStr += 'db = db.getSiblingDB("local");';
+evalStr += 'db.createCollection("oplog.rs", {capped: true, size: 10000});';
+evalStr += 'db.createCollection("oplog.$main", {capped: true, size: 10000});';
+evalStr += 'db.createCollection("startup_log", {capped: true, size: 10000});';
+// ensure bad documents are not a problem in local.oplog.*
+evalStr += 'db.oplog.rs._validateForStorage =function() {};';
+evalStr += 'db.oplog.rs._validateObject = function() {};';
+evalStr += 'db.oplog.rs.insert({asdf:{"r.e.d":1}});';
+evalStr += 'db.oplog.$main._validateForStorage =function() {};';
+evalStr += 'db.oplog.$main._validateObject = function() {};';
+evalStr += 'db.oplog.$main.insert({asdf:{"r.e.d":1}});';
+
var shellTwoOh = MongoRunner.runMongoTool("mongo", {binVersion:"2.0", port: port, eval:evalStr});
// now check each collection and fulldb to see that upgradeCheck returns false
@@ -72,6 +107,10 @@ assert(!sourceDB.upgradeCheck());
assert(sourceDB.upgradeCheck({collection:"good"}));
assert(sourceDB.upgradeCheck({collection:"good2"}));
assert(sourceDB.upgradeCheck({collection:"good3"}));
+assert(sourceDB.upgradeCheck({collection:"$cappedNoIdIndex"}));
+assert(sourceDB.upgradeCheck({collection:"system.cappedNoIdIndex"}));
+assert(configDB.upgradeCheck());
+assert(localDB.upgradeCheck());
// also check that AllDBs returns false
assert(!sourceDB.getSiblingDB("admin").upgradeCheckAllDBs());
diff --git a/src/mongo/shell/upgrade_check.js b/src/mongo/shell/upgrade_check.js
index 17482755c09..3ab4bb21fed 100644
--- a/src/mongo/shell/upgrade_check.js
+++ b/src/mongo/shell/upgrade_check.js
@@ -39,10 +39,11 @@ var collUpgradeCheck = function(collObj) {
var goodSoFar = true;
// check for _id index if and only if it should be present
- // no $, not oplog, not system
+ // no $, not oplog, not system, not config db
var indexColl = dbObj.getSiblingDB(dbName).system.indexes;
if (collName.indexOf('$') === -1 &&
collName.indexOf("system.") !== 0 &&
+ dbName !== "config" &&
(dbName !== "local" || (collName.indexOf("oplog.") !== 0 && collName !== "startup_log"))) {
var idIdx = indexColl.find({ns: fullName, name:"_id_"}).addOption(DBQuery.Option.noTimeout);
if (!idIdx.hasNext()) {