Class GraphStageLogic
- java.lang.Object
-
- akka.stream.stage.GraphStageLogic
-
- Direct Known Subclasses:
GraphStageLogicWithLogging
,KillSwitches.KillableGraphStageLogic
,TimerGraphStageLogic
public abstract class GraphStageLogic extends java.lang.Object
Represents the processing logic behind aGraphStage
. Roughly speaking, a subclass ofGraphStageLogic
is a collection of the following parts: * A set ofInHandler
andOutHandler
instances and their assignments to theInlet
s andOutlet
s of the enclosingGraphStage
* Possible mutable state, accessible from theInHandler
andOutHandler
callbacks, but not from anywhere else (as such access would not be thread-safe) * The lifecycle hookspreStart()
andpostStop()
* Methods for performing stream processing actions, like pulling or pushing elementsThe operator logic is completed once all its input and output ports have been closed. This can be changed by setting
setKeepGoing
to true.The
postStop
lifecycle hook on the logic itself is called once all ports are closed. This is the only tear down callback that is guaranteed to happen, if the actor system or the materializer is terminated the handlers may never see any callbacks toonUpstreamFailure
,onUpstreamFinish
oronDownstreamFinish
. Therefore operator resource cleanup should always be done inpostStop
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
GraphStageLogic.ConditionalTerminateInput
Input handler that terminates the state upon receiving completion if the given condition holds at that time.static class
GraphStageLogic.ConditionalTerminateOutput
Output handler that terminates the state upon receiving completion if the given condition holds at that time.static class
GraphStageLogic.EagerTerminateInput$
Input handler that terminates the operator upon receiving completion.static class
GraphStageLogic.EagerTerminateOutput$
Output handler that terminates the operator upon cancellation.static class
GraphStageLogic.IgnoreTerminateInput$
Input handler that does not terminate the operator upon receiving completion.static class
GraphStageLogic.IgnoreTerminateOutput$
Output handler that does not terminate the operator upon cancellation.static class
GraphStageLogic.StageActor
Minimal actor to work with other actors and watch them in a synchronous waysstatic class
GraphStageLogic.StageActorRef$
static class
GraphStageLogic.StageActorRefNotInitializedException
static class
GraphStageLogic.StageActorRefNotInitializedException$
class
GraphStageLogic.SubSinkInlet<T>
INTERNAL APIclass
GraphStageLogic.SubSourceOutlet<T>
INTERNAL APIstatic class
GraphStageLogic.TotallyIgnorantInput$
Input handler that does not terminate the operator upon receiving completion nor failure.
-
Constructor Summary
Constructors Constructor Description GraphStageLogic(Shape shape)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
abortEmitting(Outlet<?> out)
Abort outstanding (suspended) emissions for the given outlet, if there are any.protected void
abortReading(Inlet<?> in)
Abort outstanding (suspended) reading for the given inlet, if there is any.protected void
afterPostStop()
INTERNAL APIprotected void
beforePreStart()
INTERNAL APIprotected <T> void
cancel(Inlet<T> in)
Requests to stop receiving events from a given input port.protected <T> void
cancel(Inlet<T> in, java.lang.Throwable cause)
Requests to stop receiving events from a given input port.void
cancelStage(java.lang.Throwable cause)
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>complete(akka.stream.Outlet<T>)
on all the input or output ports that have been called, then marks the stage as stopped.protected <T> void
complete(Outlet<T> out)
Signals that there will be no more elements emitted on the given port.void
completeStage()
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>complete(akka.stream.Outlet<T>)
on all the input or output ports that have been called, then marks the operator as stopped.protected InHandler
conditionalTerminateInput(scala.Function0<java.lang.Object> predicate)
Input handler that terminates the state upon receiving completion if the given condition holds at that time.protected OutHandler
conditionalTerminateOutput(scala.Function0<java.lang.Object> predicate)
Output handler that terminates the state upon receiving completion if the given condition holds at that time.protected <T> AsyncCallback<T>
createAsyncCallback(Procedure<T> handler)
Java API: Obtain a callback object that can be used asynchronously to re-enter the currentGraphStage
with an asynchronous notification.protected InHandler
eagerTerminateInput()
Input handler that terminates the operator upon receiving completion.protected OutHandler
eagerTerminateOutput()
Output handler that terminates the operator upon cancellation.protected <T> void
emit(Outlet<T> out, T elem)
Emit an element through the given outlet, suspending execution if necessary.protected <T> void
emit(Outlet<T> out, T elem, Effect andThen)
protected <T> void
emit(Outlet<T> out, T elem, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit an element through the given outlet and continue with the given thunk afterwards, suspending execution if necessary.protected <T> void
emitMultiple(Outlet<T> out, java.util.Iterator<T> elems)
Java APIprotected <T> void
emitMultiple(Outlet<T> out, java.util.Iterator<T> elems, Effect andThen)
Java APIprotected <T> void
emitMultiple(Outlet<T> out, scala.collection.immutable.Iterable<T> elems)
Emit a sequence of elements through the given outlet, suspending execution if necessary.protected <T> void
emitMultiple(Outlet<T> out, scala.collection.immutable.Iterable<T> elems, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit a sequence of elements through the given outlet and continue with the given thunk afterwards, suspending execution if necessary.protected <T> void
emitMultiple(Outlet<T> out, scala.collection.Iterator<T> elems)
Emit a sequence of elements through the given outlet, suspending execution if necessary.protected <T> void
emitMultiple(Outlet<T> out, scala.collection.Iterator<T> elems, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit a sequence of elements through the given outlet and continue with the given thunk afterwards, suspending execution if necessary.protected <T> void
fail(Outlet<T> out, java.lang.Throwable ex)
Signals failure through the given port.void
failStage(java.lang.Throwable ex)
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>fail(akka.stream.Outlet<T>,java.lang.Throwable)
on all the input or output ports that have been called, then marks the operator as stopped.<T> AsyncCallback<T>
getAsyncCallback(scala.Function1<T,scala.runtime.BoxedUnit> handler)
Obtain a callback object that can be used asynchronously to re-enter the currentGraphStage
with an asynchronous notification.protected GraphStageLogic.StageActor
getEagerStageActor(Materializer eagerMaterializer, scala.Function1<scala.Tuple2<ActorRef,java.lang.Object>,scala.runtime.BoxedUnit> receive)
INTERNAL APIprotected InHandler
getHandler(Inlet<?> in)
Retrieves the current callback for the events on the givenInlet
protected OutHandler
getHandler(Outlet<?> out)
Retrieves the current callback for the events on the givenOutlet
protected GraphStageLogic.StageActor
getStageActor(scala.Function1<scala.Tuple2<ActorRef,java.lang.Object>,scala.runtime.BoxedUnit> receive)
Initialize aStageActorRef
which can be used to interact with from the outside world "as-if" anActor
.protected <T> T
grab(Inlet<T> in)
Once the callbackInHandler.onPush
for an input port has been invoked, the element that has been pushed can be retrieved via this method.protected <T> boolean
hasBeenPulled(Inlet<T> in)
Indicates whether there is already a pending pull for the given input port.protected InHandler
ignoreTerminateInput()
Input handler that does not terminate the operator upon receiving completion.protected OutHandler
ignoreTerminateOutput()
Output handler that does not terminate the operator upon cancellation.int
inCount()
protected <T> boolean
isAvailable(Inlet<T> in)
Indicates whether there is an element waiting at the given input port.<T> boolean
isAvailable(Outlet<T> out)
Return true if the given output port is ready to be pushed.protected <T> boolean
isClosed(Inlet<T> in)
Indicates whether the port has been closed.protected <T> boolean
isClosed(Outlet<T> out)
Indicates whether the port has been closed.protected Materializer
materializer()
TheMaterializer
that has set this GraphStage in motion.int
outCount()
protected <Out,In extends Out>
voidpassAlong(Inlet<In> from, Outlet<Out> to, boolean doFinish, boolean doFail, boolean doPull)
Install a handler on the given inlet that emits received elements on the given outlet before pulling for more data.protected <Out,In extends Out>
booleanpassAlong$default$3()
protected <Out,In extends Out>
booleanpassAlong$default$4()
protected <Out,In extends Out>
booleanpassAlong$default$5()
void
postStop()
Invoked after processing of external events stopped because the operator is about to stop or fail.void
preStart()
Invoked before any external events are processed, at the startup of the operator.protected <T> void
pull(Inlet<T> in)
Requests an element on the given port.protected <T> void
push(Outlet<T> out, T elem)
Emits an element through the given output port.protected <T> void
read(Inlet<T> in, Procedure<T> andThen, Effect onClose)
Java API: Read an element from the given inlet and continue with the given function, suspending execution if necessary.protected <T> void
read(Inlet<T> in, scala.Function1<T,scala.runtime.BoxedUnit> andThen, scala.Function0<scala.runtime.BoxedUnit> onClose)
Read an element from the given inlet and continue with the given function, suspending execution if necessary.protected <T> void
readN(Inlet<T> in, int n, Procedure<java.util.List<T>> andThen, Procedure<java.util.List<T>> onClose)
Java API: Read a number of elements from the given inlet and continue with the given function, suspending execution if necessary.protected <T> void
readN(Inlet<T> in, int n, scala.Function1<scala.collection.immutable.Seq<T>,scala.runtime.BoxedUnit> andThen, scala.Function1<scala.collection.immutable.Seq<T>,scala.runtime.BoxedUnit> onClose)
Read a number of elements from the given inlet and continue with the given function, suspending execution if necessary.protected void
setHandler(Inlet<?> in, InHandler handler)
Assigns callbacks for the events for anInlet
protected void
setHandler(Outlet<?> out, OutHandler handler)
Assigns callbacks for the events for anOutlet
protected void
setHandlers(Inlet<?> in, Outlet<?> out, InHandler handler)
Assign callbacks for linear operator for bothInlet
andOutlet
protected void
setKeepGoing(boolean enabled)
Controls whether this operator shall shut down when all its ports are closed, which is the default.GraphStageLogic.StageActor
stageActor()
protected java.lang.String
stageActorName()
Override and return a name to be given to the StageActor of this operator.protected Materializer
subFusingMaterializer()
AnMaterializer
that may run fusable parts of the graphs that it materializes within the same actor as the current GraphStage (if fusing is available).java.lang.String
toString()
protected InHandler
totallyIgnorantInput()
Input handler that does not terminate the operator upon receiving completion nor failure.protected <T> void
tryPull(Inlet<T> in)
Requests an element on the given port unless the port is already closed.
-
-
-
Constructor Detail
-
GraphStageLogic
public GraphStageLogic(Shape shape)
-
-
Method Detail
-
inCount
public int inCount()
-
outCount
public int outCount()
-
materializer
protected Materializer materializer()
TheMaterializer
that has set this GraphStage in motion.Can not be used from a
GraphStage
constructor. Access to materializer is provided by theakka.stream.scaladsl.Source.fromMaterializer
,akka.stream.scaladsl.Flow.fromMaterializer
andakka.stream.scaladsl.Sink.fromMaterializer
and their corresponding Java API factories.
-
subFusingMaterializer
protected Materializer subFusingMaterializer()
AnMaterializer
that may run fusable parts of the graphs that it materializes within the same actor as the current GraphStage (if fusing is available). This materializer must not be shared outside of the GraphStage.
-
eagerTerminateInput
protected final InHandler eagerTerminateInput()
Input handler that terminates the operator upon receiving completion. The operator fails upon receiving a failure.
-
ignoreTerminateInput
protected final InHandler ignoreTerminateInput()
Input handler that does not terminate the operator upon receiving completion. The operator fails upon receiving a failure.
-
conditionalTerminateInput
protected final InHandler conditionalTerminateInput(scala.Function0<java.lang.Object> predicate)
Input handler that terminates the state upon receiving completion if the given condition holds at that time. The operator fails upon receiving a failure.
-
totallyIgnorantInput
protected final InHandler totallyIgnorantInput()
Input handler that does not terminate the operator upon receiving completion nor failure.
-
eagerTerminateOutput
protected final OutHandler eagerTerminateOutput()
Output handler that terminates the operator upon cancellation.
-
ignoreTerminateOutput
protected final OutHandler ignoreTerminateOutput()
Output handler that does not terminate the operator upon cancellation.
-
conditionalTerminateOutput
protected final OutHandler conditionalTerminateOutput(scala.Function0<java.lang.Object> predicate)
Output handler that terminates the state upon receiving completion if the given condition holds at that time. The operator fails upon receiving a failure.
-
setHandler
protected final void setHandler(Inlet<?> in, InHandler handler)
Assigns callbacks for the events for anInlet
-
setHandlers
protected final void setHandlers(Inlet<?> in, Outlet<?> out, InHandler handler)
Assign callbacks for linear operator for bothInlet
andOutlet
-
getHandler
protected final InHandler getHandler(Inlet<?> in)
Retrieves the current callback for the events on the givenInlet
-
setHandler
protected final void setHandler(Outlet<?> out, OutHandler handler)
Assigns callbacks for the events for anOutlet
-
getHandler
protected final OutHandler getHandler(Outlet<?> out)
Retrieves the current callback for the events on the givenOutlet
-
pull
protected final <T> void pull(Inlet<T> in)
Requests an element on the given port. Calling this method twice before an element arrived will fail. There can only be one outstanding request at any given time. The method<T>hasBeenPulled(akka.stream.Inlet<T>)
can be used query whether pull is allowed to be called or not. This method will also fail if the port is already closed.
-
tryPull
protected final <T> void tryPull(Inlet<T> in)
Requests an element on the given port unless the port is already closed. Calling this method twice before an element arrived will fail. There can only be one outstanding request at any given time. The method<T>hasBeenPulled(akka.stream.Inlet<T>)
can be used query whether pull is allowed to be called or not.
-
cancel
protected final <T> void cancel(Inlet<T> in)
Requests to stop receiving events from a given input port. Cancelling clears any ungrabbed elements from the port.If cancellation is due to an error, use
cancel(in, cause)
instead to propagate that cause upstream. This overload is a shortcut forcancel(in, SubscriptionWithCancelException.NoMoreElementsNeeded)
-
cancel
protected final <T> void cancel(Inlet<T> in, java.lang.Throwable cause)
Requests to stop receiving events from a given input port. Cancelling clears any ungrabbed elements from the port.
-
grab
protected final <T> T grab(Inlet<T> in)
Once the callbackInHandler.onPush
for an input port has been invoked, the element that has been pushed can be retrieved via this method. After<T>grab(akka.stream.Inlet<T>)
has been called the port is considered to be empty, and further calls to<T>grab(akka.stream.Inlet<T>)
will fail until the port is pulled again and a new element is pushed as a response.The method
<T>isAvailable(akka.stream.Inlet<T>)
can be used to query if the port has an element that can be grabbed or not.
-
hasBeenPulled
protected final <T> boolean hasBeenPulled(Inlet<T> in)
Indicates whether there is already a pending pull for the given input port. If this method returns true then<T>isAvailable(akka.stream.Inlet<T>)
must return false for that same port.
-
isAvailable
protected final <T> boolean isAvailable(Inlet<T> in)
Indicates whether there is an element waiting at the given input port.<T>grab(akka.stream.Inlet<T>)
can be used to retrieve the element. After calling<T>grab(akka.stream.Inlet<T>)
this method will return false.If this method returns true then
<T>hasBeenPulled(akka.stream.Inlet<T>)
will return false for that same port.
-
isClosed
protected final <T> boolean isClosed(Inlet<T> in)
Indicates whether the port has been closed. A closed port cannot be pulled.
-
push
protected final <T> void push(Outlet<T> out, T elem)
Emits an element through the given output port. Calling this method twice before a<T>pull(akka.stream.Inlet<T>)
has been arrived will fail. There can be only one outstanding push request at any given time. The method<T>isAvailable(akka.stream.Inlet<T>)
can be used to check if the port is ready to be pushed or not.
-
setKeepGoing
protected final void setKeepGoing(boolean enabled)
Controls whether this operator shall shut down when all its ports are closed, which is the default. In order to have it keep going past that point this method needs to be called with atrue
argument before all ports are closed, and afterwards it will not be closed until this method is called with afalse
argument or the operator is terminated viacompleteStage()
orfailStage()
.
-
complete
protected final <T> void complete(Outlet<T> out)
Signals that there will be no more elements emitted on the given port.
-
fail
protected final <T> void fail(Outlet<T> out, java.lang.Throwable ex)
Signals failure through the given port.
-
completeStage
public final void completeStage()
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>complete(akka.stream.Outlet<T>)
on all the input or output ports that have been called, then marks the operator as stopped.
-
cancelStage
public final void cancelStage(java.lang.Throwable cause)
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>complete(akka.stream.Outlet<T>)
on all the input or output ports that have been called, then marks the stage as stopped.
-
failStage
public final void failStage(java.lang.Throwable ex)
Automatically invokes<T>cancel(akka.stream.Inlet<T>)
or<T>fail(akka.stream.Outlet<T>,java.lang.Throwable)
on all the input or output ports that have been called, then marks the operator as stopped.
-
isAvailable
public final <T> boolean isAvailable(Outlet<T> out)
Return true if the given output port is ready to be pushed.
-
isClosed
protected final <T> boolean isClosed(Outlet<T> out)
Indicates whether the port has been closed. A closed port cannot be pushed.
-
readN
protected final <T> void readN(Inlet<T> in, int n, scala.Function1<scala.collection.immutable.Seq<T>,scala.runtime.BoxedUnit> andThen, scala.Function1<scala.collection.immutable.Seq<T>,scala.runtime.BoxedUnit> onClose)
Read a number of elements from the given inlet and continue with the given function, suspending execution if necessary. This action replaces theInHandler
for the given inlet if suspension is needed and reinstalls the current handler upon receiving the lastonPush()
signal.If upstream closes before N elements have been read, the
onClose
function is invoked with the elements which were read.
-
readN
protected final <T> void readN(Inlet<T> in, int n, Procedure<java.util.List<T>> andThen, Procedure<java.util.List<T>> onClose)
Java API: Read a number of elements from the given inlet and continue with the given function, suspending execution if necessary. This action replaces theInHandler
for the given inlet if suspension is needed and reinstalls the current handler upon receiving the lastonPush()
signal (before invoking theandThen
function).
-
read
protected final <T> void read(Inlet<T> in, scala.Function1<T,scala.runtime.BoxedUnit> andThen, scala.Function0<scala.runtime.BoxedUnit> onClose)
Read an element from the given inlet and continue with the given function, suspending execution if necessary. This action replaces theInHandler
for the given inlet if suspension is needed and reinstalls the current handler upon receiving theonPush()
signal (before invoking theandThen
function).
-
read
protected final <T> void read(Inlet<T> in, Procedure<T> andThen, Effect onClose)
Java API: Read an element from the given inlet and continue with the given function, suspending execution if necessary. This action replaces theInHandler
for the given inlet if suspension is needed and reinstalls the current handler upon receiving theonPush()
signal (before invoking theandThen
function).
-
abortReading
protected final void abortReading(Inlet<?> in)
Abort outstanding (suspended) reading for the given inlet, if there is any. This will reinstall the replaced handler that was in effect before theread
call.
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, scala.collection.immutable.Iterable<T> elems, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit a sequence of elements through the given outlet and continue with the given thunk afterwards, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal (before invoking theandThen
function).
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, scala.collection.immutable.Iterable<T> elems)
Emit a sequence of elements through the given outlet, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal.
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, java.util.Iterator<T> elems)
Java APIEmit a sequence of elements through the given outlet, suspending execution if necessary. This action replaces the
AbstractOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal.
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, java.util.Iterator<T> elems, Effect andThen)
Java APIEmit a sequence of elements through the given outlet, suspending execution if necessary. This action replaces the
AbstractOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal.
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, scala.collection.Iterator<T> elems, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit a sequence of elements through the given outlet and continue with the given thunk afterwards, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal (before invoking theandThen
function).
-
emitMultiple
protected final <T> void emitMultiple(Outlet<T> out, scala.collection.Iterator<T> elems)
Emit a sequence of elements through the given outlet, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal.
-
emit
protected final <T> void emit(Outlet<T> out, T elem, scala.Function0<scala.runtime.BoxedUnit> andThen)
Emit an element through the given outlet and continue with the given thunk afterwards, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal (before invoking theandThen
function).
-
emit
protected final <T> void emit(Outlet<T> out, T elem)
Emit an element through the given outlet, suspending execution if necessary. This action replaces theOutHandler
for the given outlet if suspension is needed and reinstalls the current handler upon receiving anonPull()
signal.
-
abortEmitting
protected final void abortEmitting(Outlet<?> out)
Abort outstanding (suspended) emissions for the given outlet, if there are any. This will reinstall the replaced handler that was in effect before theemit
call.
-
passAlong
protected final <Out,In extends Out> void passAlong(Inlet<In> from, Outlet<Out> to, boolean doFinish, boolean doFail, boolean doPull)
Install a handler on the given inlet that emits received elements on the given outlet before pulling for more data.doFinish
anddoFail
control whether completion or failure of the given inlet shall lead to operator termination or not.doPull
instructs to perform one initial pull on thefrom
port.
-
passAlong$default$3
protected final <Out,In extends Out> boolean passAlong$default$3()
-
passAlong$default$4
protected final <Out,In extends Out> boolean passAlong$default$4()
-
passAlong$default$5
protected final <Out,In extends Out> boolean passAlong$default$5()
-
getAsyncCallback
public final <T> AsyncCallback<T> getAsyncCallback(scala.Function1<T,scala.runtime.BoxedUnit> handler)
Obtain a callback object that can be used asynchronously to re-enter the currentGraphStage
with an asynchronous notification. Theinvoke
method of the returnedAsyncCallback
is safe to be called from other threads. It will in the background thread-safely delegate to the passed callback function. I.e.invoke
will be called by other thread and the passed handler will be invoked eventually in a thread-safe way by the execution environment.In case stream is not yet materialized
AsyncCallback
will buffer events until stream is available.AsyncCallback.invokeWithFeedback
has an internal promise that will be failed if event cannot be processed due to stream completion.To be thread safe this method must only be called from either the constructor of the graph operator during materialization or one of the methods invoked by the graph operator machinery, such as
onPush
andonPull
.This object can be cached and reused within the same
GraphStageLogic
.
-
createAsyncCallback
protected final <T> AsyncCallback<T> createAsyncCallback(Procedure<T> handler)
Java API: Obtain a callback object that can be used asynchronously to re-enter the currentGraphStage
with an asynchronous notification. Theinvoke
method of the returnedAsyncCallback
is safe to be called from other threads. It will in the background thread-safely delegate to the passed callback function. I.e.invoke
will be called by other thread and the passed handler will be invoked eventually in a thread-safe way by the execution environment.AsyncCallback.invokeWithFeedback
has an internal promise that will be failed if event cannot be processed due to stream completion.This object can be cached and reused within the same
GraphStageLogic
.
-
stageActor
public final GraphStageLogic.StageActor stageActor()
-
getStageActor
protected final GraphStageLogic.StageActor getStageActor(scala.Function1<scala.Tuple2<ActorRef,java.lang.Object>,scala.runtime.BoxedUnit> receive)
Initialize aStageActorRef
which can be used to interact with from the outside world "as-if" anActor
. The messages are looped through the<T>getAsyncCallback(scala.Function1<T,scala.runtime.BoxedUnit>)
mechanism ofGraphStage
so they are safe to modify internal state of this operator.This method must (the earliest) be called after the
GraphStageLogic
constructor has finished running, for example from thepreStart()
callback the graph operator logic provides.Created
StageActorRef
to get messages and watch other actors in synchronous way.The
StageActorRef
's lifecycle is bound to the operator, in other words when the operator is finished, the Actor will be terminated as well. The entity backing theStageActorRef
is not a real Actor, but theGraphStageLogic
itself, therefore it does not react toPoisonPill
.To be thread safe this method must only be called from either the constructor of the graph operator during materialization or one of the methods invoked by the graph operator machinery, such as
onPush
andonPull
.- Parameters:
receive
- callback that will be called upon receiving of a message by this special Actor- Returns:
- minimal actor with watch method
-
getEagerStageActor
protected GraphStageLogic.StageActor getEagerStageActor(Materializer eagerMaterializer, scala.Function1<scala.Tuple2<ActorRef,java.lang.Object>,scala.runtime.BoxedUnit> receive)
INTERNAL APITo be thread safe this method must only be called from either the constructor of the graph operator during materialization or one of the methods invoked by the graph operator machinery, such as
onPush
andonPull
.
-
stageActorName
protected java.lang.String stageActorName()
Override and return a name to be given to the StageActor of this operator.This method will be only invoked and used once, during the first
getStageActor(scala.Function1<scala.Tuple2<akka.actor.ActorRef,java.lang.Object>,scala.runtime.BoxedUnit>)
invocation whichc reates the actor, since subsequentgetStageActors
calls function likebecome
, rather than creating new actors.Returns an empty string by default, which means that the name will a unique generated String (e.g. "$$a").
-
beforePreStart
protected void beforePreStart()
INTERNAL API
-
afterPostStop
protected void afterPostStop()
INTERNAL API
-
preStart
public void preStart() throws java.lang.Exception
Invoked before any external events are processed, at the startup of the operator.- Throws:
java.lang.Exception
-
postStop
public void postStop() throws java.lang.Exception
Invoked after processing of external events stopped because the operator is about to stop or fail.- Throws:
java.lang.Exception
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-