|
Consider the following sequence of operations:
- db.c.insert({_id: 1, x: "words to index", language: 1});
- db.c.update({_id: 1}, {$unset: {language: 1}});
- db.c.createIndex({x: "text"});
The originally inserted document cannot be indexed by the text index, since its language field is not specified as a string. This is all fine on the replica set primary node, since the bad language field is removed before the index is created. A secondary, however, might have to replay these oplog entries after cloning the index. In this case, the insertion will fail with "Location17261: found language override field in document with non-string type", causing the secondary to trip a fatal assertion.
In order to handle cases like this, secondary nodes are expected to relax indexing constraints during oplog application, since constraint violations will be resolved once a consistent point in the oplog is reached. However, the secondary is not properly relaxing text index constraints related to parsing of the language.
|