summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Hirschhorn <max.hirschhorn@mongodb.com>2016-11-09 09:03:44 -0500
committerMax Hirschhorn <max.hirschhorn@mongodb.com>2016-11-09 09:03:44 -0500
commit1774b8751bbd9edc31bd468ea4d37ba41653031c (patch)
tree58e0abfd5d54af5ab50151772808c85f64e4a830
parent6359f80037d38c3d342543822550d7350aa91ee7 (diff)
downloadmongo-1774b8751bbd9edc31bd468ea4d37ba41653031c.tar.gz
SERVER-26894 Tolerate invalid views in validate_collections.js.
-rw-r--r--jstests/hooks/validate_collections.js34
1 files changed, 25 insertions, 9 deletions
diff --git a/jstests/hooks/validate_collections.js b/jstests/hooks/validate_collections.js
index 89c7f73e798..aeb38a98bf5 100644
--- a/jstests/hooks/validate_collections.js
+++ b/jstests/hooks/validate_collections.js
@@ -40,22 +40,38 @@ function validateCollections(db, obj) {
// original value.
var originalFeatureCompatibilityVersion;
if (jsTest.options().forceValidationWithFeatureCompatibilityVersion) {
- originalFeatureCompatibilityVersion = getFeatureCompatibilityVersion(adminDB);
+ try {
+ originalFeatureCompatibilityVersion = getFeatureCompatibilityVersion(adminDB);
+ } catch (e) {
+ if (jsTest.options().skipValidationOnInvalidViewDefinitions &&
+ e.code === ErrorCodes.InvalidViewDefinition) {
+ print("Reading the featureCompatibilityVersion from the admin.system.version" +
+ " collection failed due to an invalid view definition on the admin database");
+ // The view catalog would only have been resolved if the namespace doesn't exist as
+ // a collection. The absence of the admin.system.version collection is equivalent to
+ // having featureCompatibilityVersion=3.2.
+ originalFeatureCompatibilityVersion = "3.2";
+ } else {
+ throw e;
+ }
+ }
+
setFeatureCompatibilityVersion(
adminDB, jsTest.options().forceValidationWithFeatureCompatibilityVersion);
}
// Don't run validate on view namespaces.
- let listCollectionsRes = db.runCommand({listCollections: 1, filter: {"type": "collection"}});
- if (jsTest.options().skipValidationOnInvalidViewDefinitions && listCollectionsRes.ok === 0) {
- assert.commandFailedWithCode(listCollectionsRes, ErrorCodes.InvalidViewDefinition);
- print('Skipping validate hook because of invalid views in system.views');
- return true;
+ let filter = {type: "collection"};
+ if (jsTest.options().skipValidationOnInvalidViewDefinitions) {
+ // If skipValidationOnInvalidViewDefinitions=true, then we avoid resolving the view catalog
+ // on the admin database.
+ //
+ // TODO SERVER-25493: Remove the $exists clause once performing an initial sync from
+ // versions of MongoDB <= 3.2 is no longer supported.
+ filter = {$or: [filter, {type: {$exists: false}}]};
}
- assert.commandWorked(listCollectionsRes);
-
- let collInfo = new DBCommandCursor(db.getMongo(), listCollectionsRes).toArray();
+ let collInfo = db.getCollectionInfos(filter);
for (var collDocument of collInfo) {
var coll = db.getCollection(collDocument["name"]);
var res = coll.validate(full);