Details
Description
If you have a mongod 3.0 shard (which has 2dsphere index version 2 as default) and a mongod 3.1.6+ shard (which has 2dsphere index version 3 as default), they will have different 2dsphere index versions if you build an index. This should work without issue since version 3 does not change any semantics. However, when a chunk moves from a mongod 3.1.6 shard to a mongod 3.0 shard, it triggers the uassert here: https://github.com/mongodb/mongo/blob/v3.0/src/mongo/db/index/s2_access_method.cpp#L97-L101
I believe this occurs when attempting to check if the indexes are equivalent on the receiver shard.