BlockManager.getBlocksWithLocations() needs to iterate blocks from a randomly selected startBlock index. It creates an iterator which points to the first block and then skips all blocks until startBlock. It is inefficient when DN has multiple storages. Instead of skipping blocks one by one we can skip entire storages. Should be more efficient on average.