Currently the map, which contains the CollectionShardingState(s) for each namespace is under the ShardingState and is protected by its mutex. This causes circular dependency between the two classes, breaks encapsulation and also adds more users to an already contended mutex.
This map should be pulled as a separate ServiceContext decoration, private to CollectionShardingState.