Should it just pass `shardIt.size()` instead of `shardIt`? I'mworried about letting implementations of this method reset or consume the iterator?