Class AsyncExecutionController<K>
java.lang.Object
org.apache.flink.runtime.asyncprocessing.AsyncExecutionController<K>
- Type Parameters:
K- the type of the key
- All Implemented Interfaces:
Closeable,AutoCloseable,StateRequestHandler
The Async Execution Controller (AEC) receives processing requests from operators, and put them
into execution according to some strategies.
Preserving the sequence of elements bearing the same key by delaying subsequent requests
until the processing of preceding ones is finalized.
Tracking the in-flight data(records) and blocking the input if too much data in flight
(back-pressure). It invokes
It is responsible for:
MailboxExecutor.yield() to pause current operations,
allowing for the execution of callbacks (mails in Mailbox).-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceA listener listens the key context switch. -
Constructor Summary
ConstructorsConstructorDescriptionAsyncExecutionController(org.apache.flink.api.common.operators.MailboxExecutor mailboxExecutor, org.apache.flink.core.state.StateFutureImpl.AsyncFrameworkExceptionHandler exceptionHandler, StateExecutor stateExecutor, DeclarationManager declarationManager, int maxParallelism, int batchSize, long bufferTimeout, int maxInFlightRecords, AsyncExecutionController.SwitchContextListener<K> switchContextListener, org.apache.flink.metrics.MetricGroup metricGroup) -
Method Summary
Modifier and TypeMethodDescriptionbuildContext(Object record, K key) Build a new context based on record and key.buildContext(Object record, K key, boolean inherit) Build a new context based on record and key.voidclose()voiddrainInflightRecords(int targetNum) A helper function to drain in-flight records utilinFlightRecordNumwithin the limit of giventargetNum.int<IN,OUT> org.apache.flink.core.state.InternalStateFuture<OUT> handleRequest(org.apache.flink.api.common.state.v2.State state, StateRequestType type, boolean sync, IN payload, boolean allowOverdraft) Submit aStateRequestto this AsyncExecutionController and trigger it if needed.<IN,OUT> org.apache.flink.core.state.InternalStateFuture<OUT> handleRequest(org.apache.flink.api.common.state.v2.State state, StateRequestType type, IN payload) Submit aStateRequestto this AsyncExecutionController and trigger it if needed.<IN,OUT> OUT handleRequestSync(org.apache.flink.api.common.state.v2.State state, StateRequestType type, IN payload) Submit aStateRequestto this StateRequestHandler, and wait for the response synchronously.voidprocessNonRecord(org.apache.flink.util.function.ThrowingRunnable<? extends Exception> triggerAction, org.apache.flink.util.function.ThrowingRunnable<? extends Exception> finalAction) voidsetCurrentContext(RecordContext<K> switchingContext) Each time before a code segment (callback) is about to run in mailbox (task thread), this method should be called to switch a context in AEC.<N> voidsetCurrentNamespaceForState(InternalPartitionedState<N> state, N namespace) Set current namespace for a state.org.apache.flink.api.common.state.v2.StateFuture<Void>syncPointRequestWithCallback(org.apache.flink.util.function.ThrowingRunnable<Exception> callback, boolean allowOverdraft) A helper to request aStateRequestType.SYNC_POINTand run a callback if it finishes (once the record is not blocked).booleantriggerIfNeeded(boolean force) Trigger a batch of requests.
-
Constructor Details
-
AsyncExecutionController
public AsyncExecutionController(org.apache.flink.api.common.operators.MailboxExecutor mailboxExecutor, org.apache.flink.core.state.StateFutureImpl.AsyncFrameworkExceptionHandler exceptionHandler, StateExecutor stateExecutor, DeclarationManager declarationManager, int maxParallelism, int batchSize, long bufferTimeout, int maxInFlightRecords, @Nullable AsyncExecutionController.SwitchContextListener<K> switchContextListener, @Nullable org.apache.flink.metrics.MetricGroup metricGroup)
-
-
Method Details
-
buildContext
Build a new context based on record and key. Also wired with internalKeyAccountingUnit.- Parameters:
record- the given record.key- the given key.- Returns:
- the built record context.
-
buildContext
Build a new context based on record and key. Also wired with internalKeyAccountingUnit.- Parameters:
record- the given record.key- the given key.inherit- whether to inherit epoch and variables from the current context. Or otherwise create new ones.- Returns:
- the built record context.
-
setCurrentContext
Each time before a code segment (callback) is about to run in mailbox (task thread), this method should be called to switch a context in AEC.- Parameters:
switchingContext- the context to switch.
-
getCurrentContext
-
handleRequest
public <IN,OUT> org.apache.flink.core.state.InternalStateFuture<OUT> handleRequest(@Nullable org.apache.flink.api.common.state.v2.State state, StateRequestType type, @Nullable IN payload) Submit aStateRequestto this AsyncExecutionController and trigger it if needed.- Specified by:
handleRequestin interfaceStateRequestHandler- Parameters:
state- the state to request. Could benullif the type isStateRequestType.SYNC_POINT.type- the type of this request.payload- the payload input for this request.- Returns:
- the state future.
-
handleRequest
public <IN,OUT> org.apache.flink.core.state.InternalStateFuture<OUT> handleRequest(@Nullable org.apache.flink.api.common.state.v2.State state, StateRequestType type, boolean sync, @Nullable IN payload, boolean allowOverdraft) Submit aStateRequestto this AsyncExecutionController and trigger it if needed.- Parameters:
state- the state to request. Could benullif the type isStateRequestType.SYNC_POINT.type- the type of this request.sync- whether to trigger the request synchronously once it's ready.payload- the payload input for this request.allowOverdraft- whether to allow overdraft.- Returns:
- the state future.
-
handleRequestSync
public <IN,OUT> OUT handleRequestSync(org.apache.flink.api.common.state.v2.State state, StateRequestType type, @Nullable IN payload) Description copied from interface:StateRequestHandlerSubmit aStateRequestto this StateRequestHandler, and wait for the response synchronously.- Specified by:
handleRequestSyncin interfaceStateRequestHandler- Parameters:
state- the state to request.type- the type of this request.payload- the payload input for this request.- Returns:
- the state future.
-
setCurrentNamespaceForState
public <N> void setCurrentNamespaceForState(@Nonnull InternalPartitionedState<N> state, N namespace) Description copied from interface:StateRequestHandlerSet current namespace for a state. SeeInternalPartitionedState.setCurrentNamespace(Object).- Specified by:
setCurrentNamespaceForStatein interfaceStateRequestHandler
-
triggerIfNeeded
public boolean triggerIfNeeded(boolean force) Trigger a batch of requests.- Parameters:
force- whether to trigger requests in force.
-
syncPointRequestWithCallback
public org.apache.flink.api.common.state.v2.StateFuture<Void> syncPointRequestWithCallback(org.apache.flink.util.function.ThrowingRunnable<Exception> callback, boolean allowOverdraft) A helper to request aStateRequestType.SYNC_POINTand run a callback if it finishes (once the record is not blocked).- Parameters:
callback- the callback to run if it finishes (once the record is not blocked).allowOverdraft- whether to overdraft the in-flight buffer.
-
drainInflightRecords
public void drainInflightRecords(int targetNum) A helper function to drain in-flight records utilinFlightRecordNumwithin the limit of giventargetNum.- Parameters:
targetNum- the targetinFlightRecordNumto achieve.
-
processNonRecord
-
getStateExecutor
-
getInFlightRecordNum
@VisibleForTesting public int getInFlightRecordNum() -
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-