Interface TaskSlotTable<T extends TaskSlotPayload>
- All Superinterfaces:
AutoCloseable,org.apache.flink.util.AutoCloseableAsync,TimeoutListener<AllocationID>
- All Known Implementing Classes:
TaskSlotTableImpl
public interface TaskSlotTable<T extends TaskSlotPayload>
extends TimeoutListener<AllocationID>, org.apache.flink.util.AutoCloseableAsync
Container for multiple
TaskSlot instances. Additionally, it maintains multiple indices
for faster access to tasks and sets of allocated slots.
The task slot table automatically registers timeouts for allocated slots which cannot be assigned to a job manager.
Before the task slot table can be used, it must be started via the start(org.apache.flink.runtime.taskexecutor.slot.SlotActions, org.apache.flink.runtime.concurrent.ComponentMainThreadExecutor) method.
-
Method Summary
Modifier and TypeMethodDescriptionbooleanAdd the given task to the slot identified by the task's allocation id.booleanallocateSlot(int index, org.apache.flink.api.common.JobID jobId, AllocationID allocationId, Duration slotTimeout) Allocate the slot with the given index for the given job and allocation id.booleanallocateSlot(int index, org.apache.flink.api.common.JobID jobId, AllocationID allocationId, ResourceProfile resourceProfile, Duration slotTimeout) Allocate the slot with the given index for the given job and allocation id.createSlotReport(ResourceID resourceId) default intfreeSlot(AllocationID allocationId) Try to free the slot.intfreeSlot(AllocationID allocationId, Throwable cause) Tries to free the slot.Returns theAllocationIDof any active task listed in thisTaskSlotTable.getActiveTaskSlotAllocationIdsPerJob(org.apache.flink.api.common.JobID jobId) getAllocatedSlots(org.apache.flink.api.common.JobID jobId) Return an iterator of allocated slots for the given job id.getAllocationIdsPerJob(org.apache.flink.api.common.JobID jobId) Returns the allAllocationIDfor the given job.getCurrentAllocation(int index) Get the current allocation for the task slot with the given index.org.apache.flink.api.common.JobIDgetOwningJob(AllocationID allocationId) Returns the owning job of theTaskSlotidentified by the givenAllocationID.getTask(ExecutionAttemptID executionAttemptID) Get the task for the given execution attempt id.getTaskMemoryManager(AllocationID allocationID) Get the memory manager of the slot allocated for the task.getTasks(org.apache.flink.api.common.JobID jobId) Return an iterator over all tasks for a given job.booleanhasAllocatedSlots(org.apache.flink.api.common.JobID jobId) Check whether the job has allocated (not active) slots.booleanisAllocated(int index, org.apache.flink.api.common.JobID jobId, AllocationID allocationId) Check whether the slot for the given index is allocated for the given job and allocation id.booleanisSlotFree(int index) Check whether the task slot with the given index is free.booleanisValidTimeout(AllocationID allocationId, UUID ticket) Check whether the timeout with ticket is valid for the given allocation id.booleanmarkSlotActive(AllocationID allocationId) Marks the slot under the given allocation id as active.booleanmarkSlotInactive(AllocationID allocationId, Duration slotTimeout) Marks the slot under the given allocation id as inactive.removeTask(ExecutionAttemptID executionAttemptID) Remove the task with the given execution attempt id from its task slot.voidstart(SlotActions initialSlotActions, org.apache.flink.runtime.concurrent.ComponentMainThreadExecutor mainThreadExecutor) Start the task slot table with the given slot actions.booleantryMarkSlotActive(org.apache.flink.api.common.JobID jobId, AllocationID allocationId) Try to mark the specified slot as active if it has been allocated by the given job.Methods inherited from interface org.apache.flink.util.AutoCloseableAsync
close, closeAsyncMethods inherited from interface org.apache.flink.runtime.taskexecutor.slot.TimeoutListener
notifyTimeout
-
Method Details
-
start
void start(SlotActions initialSlotActions, org.apache.flink.runtime.concurrent.ComponentMainThreadExecutor mainThreadExecutor) Start the task slot table with the given slot actions.- Parameters:
initialSlotActions- to use for slot actionsmainThreadExecutor-ComponentMainThreadExecutorto schedule internal calls to the main thread
-
getAllocationIdsPerJob
Returns the allAllocationIDfor the given job.- Parameters:
jobId- for which to return the set ofAllocationID.- Returns:
- Set of
AllocationIDfor the given job
-
getActiveTaskSlotAllocationIds
Set<AllocationID> getActiveTaskSlotAllocationIds()Returns theAllocationIDof any active task listed in thisTaskSlotTable.- Returns:
- The
AllocationIDof any active task.
-
getActiveTaskSlotAllocationIdsPerJob
- Parameters:
jobId- TheJobIDof the job for which theAllocationIDs of the attached activeTaskSlots shall be returned.- Returns:
- A set of
AllocationIDs that belong to activeTaskSlots having the passedJobID.
-
createSlotReport
-
allocateSlot
@VisibleForTesting boolean allocateSlot(int index, org.apache.flink.api.common.JobID jobId, AllocationID allocationId, Duration slotTimeout) Allocate the slot with the given index for the given job and allocation id. If negative index is given, a new auto increasing index will be generated. Returns true if the slot could be allocated. Otherwise it returns false.- Parameters:
index- of the task slot to allocate, use negative value for dynamic slot allocationjobId- to allocate the task slot forallocationId- identifying the allocationslotTimeout- until the slot times out- Returns:
- True if the task slot could be allocated; otherwise false
-
allocateSlot
boolean allocateSlot(int index, org.apache.flink.api.common.JobID jobId, AllocationID allocationId, ResourceProfile resourceProfile, Duration slotTimeout) Allocate the slot with the given index for the given job and allocation id. If negative index is given, a new auto increasing index will be generated. Returns true if the slot could be allocated. Otherwise it returns false.- Parameters:
index- of the task slot to allocate, use negative value for dynamic slot allocationjobId- to allocate the task slot forallocationId- identifying the allocationresourceProfile- of the requested slot, used only for dynamic slot allocation and will be ignored otherwiseslotTimeout- until the slot times out- Returns:
- True if the task slot could be allocated; otherwise false
-
markSlotActive
Marks the slot under the given allocation id as active. If the slot could not be found, then aSlotNotFoundExceptionis thrown.- Parameters:
allocationId- to identify the task slot to mark as active- Returns:
- True if the slot could be marked active; otherwise false
- Throws:
SlotNotFoundException- if the slot could not be found for the given allocation id
-
markSlotInactive
boolean markSlotInactive(AllocationID allocationId, Duration slotTimeout) throws SlotNotFoundException Marks the slot under the given allocation id as inactive. If the slot could not be found, then aSlotNotFoundExceptionis thrown.- Parameters:
allocationId- to identify the task slot to mark as inactiveslotTimeout- until the slot times out- Returns:
- True if the slot could be marked inactive
- Throws:
SlotNotFoundException- if the slot could not be found for the given allocation id
-
freeSlot
Try to free the slot. If the slot is empty it will set the state of the task slot to free and return its index. If the slot is not empty, then it will set the state of the task slot to releasing, fail all tasks and return -1.- Parameters:
allocationId- identifying the task slot to be freed- Returns:
- Index of the freed slot if the slot could be freed; otherwise -1
- Throws:
SlotNotFoundException- if there is not task slot for the given allocation id
-
freeSlot
Tries to free the slot. If the slot is empty it will set the state of the task slot to free and return its index. If the slot is not empty, then it will set the state of the task slot to releasing, fail all tasks and return -1.- Parameters:
allocationId- identifying the task slot to be freedcause- to fail the tasks with if slot is not empty- Returns:
- Index of the freed slot if the slot could be freed; otherwise -1
- Throws:
SlotNotFoundException- if there is not task slot for the given allocation id
-
isValidTimeout
Check whether the timeout with ticket is valid for the given allocation id.- Parameters:
allocationId- to check againstticket- of the timeout- Returns:
- True if the timeout is valid; otherwise false
-
isAllocated
Check whether the slot for the given index is allocated for the given job and allocation id.- Parameters:
index- of the task slotjobId- for which the task slot should be allocatedallocationId- which should match the task slot's allocation id- Returns:
- True if the given task slot is allocated for the given job and allocation id
-
tryMarkSlotActive
Try to mark the specified slot as active if it has been allocated by the given job.- Parameters:
jobId- of the allocated slotallocationId- identifying the allocation- Returns:
- True if the task slot could be marked active.
-
isSlotFree
boolean isSlotFree(int index) Check whether the task slot with the given index is free.- Parameters:
index- of the task slot- Returns:
- True if the task slot is free; otherwise false
-
hasAllocatedSlots
boolean hasAllocatedSlots(org.apache.flink.api.common.JobID jobId) Check whether the job has allocated (not active) slots.- Parameters:
jobId- for which to check for allocated slots- Returns:
- True if there are allocated slots for the given job id.
-
getAllocatedSlots
Return an iterator of allocated slots for the given job id.- Parameters:
jobId- for which to return the allocated slots- Returns:
- Iterator of allocated slots.
-
getOwningJob
Returns the owning job of theTaskSlotidentified by the givenAllocationID.- Parameters:
allocationId- identifying the slot for which to retrieve the owning job- Returns:
- Owning job of the specified
TaskSlotor null if there is no slot for the given allocation id or if the slot has no owning job assigned
-
addTask
Add the given task to the slot identified by the task's allocation id.- Parameters:
task- to add to the task slot with the respective allocation id- Returns:
- True if the task could be added to the task slot; otherwise false
- Throws:
SlotNotFoundException- if there was no slot for the given allocation idSlotNotActiveException- if there was no slot active for task's job and allocation id
-
removeTask
Remove the task with the given execution attempt id from its task slot. If the owning task slot is in state releasing and empty after removing the task, the slot is freed via the slot actions.- Parameters:
executionAttemptID- identifying the task to remove- Returns:
- The removed task if there is any for the given execution attempt id; otherwise null
-
getTask
Get the task for the given execution attempt id. If none could be found, then return null.- Parameters:
executionAttemptID- identifying the requested task- Returns:
- The task for the given execution attempt id if it exist; otherwise null
-
getTasks
Return an iterator over all tasks for a given job.- Parameters:
jobId- identifying the job of the requested tasks- Returns:
- Iterator over all task for a given job
-
getCurrentAllocation
Get the current allocation for the task slot with the given index.- Parameters:
index- identifying the slot for which the allocation id shall be retrieved- Returns:
- Allocation id of the specified slot if allocated; otherwise null
-
getTaskMemoryManager
Get the memory manager of the slot allocated for the task.- Parameters:
allocationID- allocation id of the slot allocated for the task- Returns:
- the memory manager of the slot allocated for the task
- Throws:
SlotNotFoundException
-