diff options
author | matt dannenberg <matt.dannenberg@10gen.com> | 2014-09-08 13:25:47 -0400 |
---|---|---|
committer | matt dannenberg <matt.dannenberg@10gen.com> | 2014-09-10 08:14:26 -0400 |
commit | 7f085a7cd723ca6045e430d367e592879d92d994 (patch) | |
tree | 812871db10af0ad3b2fd39784ae7ba0bca74cdcf | |
parent | 4d33f84dda05fa9b72e1b1b50d1cfcae13e36470 (diff) | |
download | mongo-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.js | 45 | ||||
-rw-r--r-- | src/mongo/shell/upgrade_check.js | 3 |
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()) { |