• T
    [FLINK-7956] [flip6] Add support for queued scheduling with slot sharing to SlotPool · 0ef7fdde
    Till Rohrmann 提交于
    This commit adds support for queued scheduling with slot sharing to the
    SlotPool. The idea of slot sharing is that multiple tasks can run in the
    same slot. Moreover, queued scheduling means that a slot request must not
    be completed right away but at a later point in time. This allows to
    start new TaskExecutors in case that there are no more slots left.
    
    The main component responsible for the management of shared slots is the
    SlotSharingManager. The SlotSharingManager maintains internally a tree-like
    structure which stores the SlotContext future of the underlying
    AllocatedSlot. Whenever this future is completed potentially pending
    LogicalSlot instantiations are executed and sent to the slot requester.
    
    A shared slot is represented by a MultiTaskSlot which can harbour multiple
    TaskSlots. A TaskSlot can either be a MultiTaskSlot or a SingleTaskSlot.
    
    In order to represent co-location constraints, we first obtain a root
    MultiTaskSlot and then allocate a nested MultiTaskSlot in which the
    co-located tasks are allocated. The corresponding SlotRequestID is assigned
    to the CoLocationConstraint in order to make the TaskSlot retrievable for
    other tasks assigned to the same CoLocationConstraint.
    
    Port SchedulerSlotSharingTest, SchedulerIsolatedTasksTest and
    ScheduleWithCoLocationHintTest to run with SlotPool.
    
    Restructure SlotPool components.
    
    Add SlotSharingManagerTest, SlotPoolSlotSharingTest and
    SlotPoolCoLocationTest.
    
    This closes #5091.
    0ef7fdde
ExecutionVertex.java 29.3 KB