If you're a driver author, this affects you. If you're a driver user, you may see "APIMismatchError" when you use the Versioned API with the latest server, until your driver implements DRIVERS-1720. If you don't use the Versioned API this doesn't affect you.
There are two scenarios affected:
1. A driver passes any API parameters (apiVersion, apiStrict, apiDeprecation) to a cursor-creating command, such as find, aggregate, listCollections. Let's call the cursor-creating command an "initiating command" and getMore a "continuing command".
2. A driver passes any API parameters to the first command in a transaction. Let's call the first command an "initiating command", and all other commands in the transaction (including commit/abortTransaction) "continuing commands".
In the beginning, continuing commands rejected all API params. They used the same API params as the initiating command. But the Database Experience (DBX) team told me that special-casing continuing commands made driver work harder, so we changed it.
Recently, I changed continuing commands to accept either the same API params as the initiating command, or no API params (
SERVER-55614). Either way, continuing commands behave the same. This either/or behavior was a step on the way to our goal:
Finally, I changed continuing commands to require the same API params as initiating commands. So if a driver passes any (or no) API params to an initiating command it must pass the same (or no) API params to all continuing commands.