I still don't get why we return a set here? What's the purpose. Either the user knows the shards or not, right? If he does not, he should return _null_ so that we can apply the default strategy. Letting the user return return all shards in case where he cannot determine the specific shards combines two cases into one.