|
redbeard0531, it isn't clear to me why repairDatabasesAndCheckVersion() using the system.indexes collection is an issue. It only does so to handle cases where
- The index was created before 2.4
- The index has an invalid key pattern.
- The index has an invalid "v" field.
#1 doesn't apply to WiredTiger because it was introduced in 3.0. #2 and #3 are still checked during the mongod initialization process because IndexCatalog::init() calls IndexCatalog::_setupInMemoryStructures(), which calls IndexCatalog::_isSpecOk() on the infoObj of each IndexDescriptor.
Since the changes from SERVER-24248 aren't quite in yet, here's an example of running the partial_index_upgrade.js test with the WiredTiger storage engine.
Patch to apply
diff --git a/jstests/multiVersion/partial_index_upgrade.js b/jstests/multiVersion/partial_index_upgrade.js
|
index b19631a..65b8ddc 100644
|
--- a/jstests/multiVersion/partial_index_upgrade.js
|
+++ b/jstests/multiVersion/partial_index_upgrade.js
|
@@ -31,6 +31,7 @@
|
var defaultOptions = {
|
dbpath: dbpath,
|
noCleanData: true,
|
+ storageEngine: 'wiredTiger',
|
};
|
|
// Start the old version.
|
resmoke.py invocation
PATH=$PATH:/data/multiversion/ python buildscripts/resmoke.py --executor=multiversion jstests/multiVersion/partial_index_upgrade.js
|
Output
[js_test:partial_index_upgrade] 2016-08-09T17:54:39.626-0400 2016-08-09T17:54:39.626-0400 I - [thread1] shell: started program (sh46055): /data/multiversion/mongod-3.0 --dbpath /data/db/job0/mongorunner/partial_index_upgrade --storageEngine wiredTiger --port 20010 --nopreallocj --setParameter enableTestCommands=1
|
...
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:40.329-0400 2016-08-09T17:54:40.329-0400 I - [thread1] shell: stopped mongo program on port 20010
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:40.331-0400 2016-08-09T17:54:40.331-0400 I - [thread1] shell: started program (sh46056): /Users/maxh/Documents/GitHub/mongo/mongod --dbpath /data/db/job0/mongorunner/partial_index_upgrade --storageEngine wiredTiger --port 20011 --nopreallocj --setParameter enableTestCommands=1
|
...
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:41.474-0400 d20011| 2016-08-09T17:54:41.473-0400 F INDEX [initandlisten] Found an invalid index { v: 1, key: { a: 1.0 }, name: "a_1", ns: "test.coll", partialFilterExpression: "not an object" } on the test.coll collection: "partialFilterExpression" for an index must be a document
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:41.474-0400 d20011| 2016-08-09T17:54:41.473-0400 I - [initandlisten] Fatal Assertion 28782 at src/mongo/db/catalog/index_catalog.cpp 140
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:41.475-0400 d20011| 2016-08-09T17:54:41.473-0400 I - [initandlisten]
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:41.475-0400 d20011|
|
[js_test:partial_index_upgrade] 2016-08-09T17:54:41.475-0400 d20011| ***aborting after fassert() failure
|
|