@Internal public class MailboxProcessor extends Object implements Closeable
runMailboxLoop()
that continuously executes the provided MailboxDefaultAction
in a loop. On each iteration,
the method also checks if there are pending actions in the mailbox and executes such actions. This model ensures
single-threaded execution between the default action (e.g. record processing) and mailbox actions (e.g. checkpoint
trigger, timer firing, ...).
The MailboxDefaultAction
interacts with this class through the MailboxController
to
communicate control flow changes to the mailbox loop, e.g. that invocations of the default action are temporarily or
permanently exhausted.
The design of runMailboxLoop()
is centered around the idea of keeping the expected hot path
(default action, no mail) as fast as possible. This means that all checking of mail and other control flags
(mailboxLoopRunning, suspendedDefaultAction) are always connected to #hasMail indicating true. This means that
control flag changes in the mailbox thread can be done directly, but we must ensure that there is at least one action
in the mailbox so that the change is picked up. For control flag changes by all other threads, that must happen
through mailbox actions, this is automatically the case.
This class has a open-prepareClose-close lifecycle that is connected with and maps to the lifecycle of the
encapsulated TaskMailbox
(which is open-quiesce-close).
Constructor and Description |
---|
MailboxProcessor(MailboxDefaultAction mailboxDefaultAction) |
MailboxProcessor(MailboxDefaultAction mailboxDefaultAction,
StreamTaskActionExecutor actionExecutor) |
MailboxProcessor(MailboxDefaultAction mailboxDefaultAction,
StreamTaskActionExecutor actionExecutor,
TaskMailbox mailbox,
MailboxExecutor mainMailboxExecutor) |
MailboxProcessor(MailboxDefaultAction mailboxDefaultAction,
TaskMailbox mailbox,
StreamTaskActionExecutor actionExecutor) |
Modifier and Type | Method and Description |
---|---|
void |
allActionsCompleted()
This method must be called to end the stream task when all actions for the tasks have been performed.
|
void |
close()
Lifecycle method to close the mailbox for action submission/retrieval.
|
void |
drain()
Finishes running all mails in the mailbox.
|
MailboxExecutor |
getMailboxExecutor(int priority)
Returns an executor service facade to submit actions to the mailbox.
|
MailboxExecutor |
getMainMailboxExecutor()
Returns a pre-created executor service that executes all mails.
|
boolean |
isDefaultActionUnavailable() |
void |
prepareClose()
Lifecycle method to close the mailbox for action submission.
|
void |
reportThrowable(Throwable throwable)
Reports a throwable for rethrowing from the mailbox thread.
|
void |
runMailboxLoop()
Runs the mailbox processing loop.
|
public MailboxProcessor(MailboxDefaultAction mailboxDefaultAction)
public MailboxProcessor(MailboxDefaultAction mailboxDefaultAction, StreamTaskActionExecutor actionExecutor)
public MailboxProcessor(MailboxDefaultAction mailboxDefaultAction, TaskMailbox mailbox, StreamTaskActionExecutor actionExecutor)
public MailboxProcessor(MailboxDefaultAction mailboxDefaultAction, StreamTaskActionExecutor actionExecutor, TaskMailbox mailbox, MailboxExecutor mainMailboxExecutor)
public MailboxExecutor getMainMailboxExecutor()
public MailboxExecutor getMailboxExecutor(int priority)
priority
- the priority of the MailboxExecutor
.public void prepareClose()
public void close()
RunnableFuture
that are still contained in the mailbox.close
in interface Closeable
close
in interface AutoCloseable
public void drain() throws Exception
Exception
public void runMailboxLoop() throws Exception
Exception
public void reportThrowable(Throwable throwable)
throwable
- to report by rethrowing from the mailbox loop.public void allActionsCompleted()
@VisibleForTesting public boolean isDefaultActionUnavailable()
Copyright © 2014–2020 The Apache Software Foundation. All rights reserved.