Parse the following new syntax for readConcern:
{readConcern: {level: "snapshot"}}
{readConcern: {atClusterTime: <timestamp>}}
Parsing for snapshot:
- Add level "snapshot" to the readConcern interface.
- Add "snapshot" level definition to the ReadConcernArgs class.
- Parse in ReadConcernArgs::initialize().
- Update ReplicationCoordinatorImpl::_validateReadConcern() to allow the readConcern level snapshot with afterClusterTime.
- Return an error if the mongod is not a member of a replica set.
- Support readConcern level snapshot for the commands aggregate, count, distinct, group, geoNear, geoSearch, find, insert, update, delete, findAndModify.
- Ban on mongos.
Parsing for atClusterTime:
- Add readConcern parsing / initialization components (ReadConcernArgs::initialize()).
- Remove the "testMode" check.
- Error if the level is not snapshot.
- Error if paired with afterOpTime or afterClusterTime.
- Update ReplicationCoordinatorImpl::_validateReadConcern() to check that the readConcern level is snapshot if atClusterTime is provided.