Currently we use the same timeout for two conceptually different things
1) How long should an operation take, overall?
2) With an awaitData cursor, how long should we wait if there is no data.
It would be useful if these were separate things; we may wish to allow for slow systems which might take several seconds to return data from a potentially large and complex query, but still return quickly (perhaps immediately) if no data is available.
This would consist of at least
1) Adding a new field to the getMore command for the no-data wait (maxTimeMS is currently consistently used for operation deadlines)
2) Keeping track of this new data on the OperationContext
3) Making expiration of the no-data wait time an interrupt, but not a fatal one.
4) Handling old queries with only maxTimeMS the same way they are now.