I'd rather define this signature to take a List<TimelineObjectHolder<String, ServerSelector>> instead of an Iterable<SegmentDescriptor>.  Then you wouldn't have to re-create the partition groupings here.  Each TimelineObjectHolder is already an iterable of the various PartitionChunk objects.

Perhaps we could store an object that includes both a SegmentDescriptor and a ServerSelector in the Timelines and then that would come out instead and could just be passed through to this...