abstract class GraphStageLogic extends AnyRef

Represents the processing logic behind a GraphStage. Roughly speaking, a subclass of GraphStageLogic is a collection of the following parts: * A set of InHandler and OutHandler instances and their assignments to the Inlets and Outlets of the enclosing GraphStage * Possible mutable state, accessible from the InHandler and OutHandler callbacks, but not from anywhere else (as such access would not be thread-safe) * The lifecycle hooks preStart() and postStop() * Methods for performing stream processing actions, like pulling or pushing elements

The 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 to onUpstreamFailure, onUpstreamFinish or onDownstreamFinish. Therefore operator resource cleanup should always be done in postStop.

Source
GraphStage.scala
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. GraphStageLogic
  2. AnyRef
  3. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new GraphStageLogic(shape: Shape)

Type Members

  1. class SubSinkInlet[T] extends AnyRef

    INTERNAL API

    INTERNAL API

    This allows the dynamic creation of an Inlet for a GraphStage which is connected to a Sink that is available for materialization (e.g. using the subFusingMaterializer). Care needs to be taken to cancel this Inlet when the operator shuts down lest the corresponding Sink be left hanging.

  2. class SubSourceOutlet[T] extends AnyRef

    INTERNAL API

    INTERNAL API

    This allows the dynamic creation of an Outlet for a GraphStage which is connected to a Source that is available for materialization (e.g. using the subFusingMaterializer). Care needs to be taken to complete this Outlet when the operator shuts down lest the corresponding Sink be left hanging. It is good practice to use the timeout method to cancel this Outlet in case the corresponding Source is not materialized within a given time limit, see e.g. ActorMaterializerSettings.

Value Members

  1. final def completeStage(): Unit

    Automatically invokes cancel() or complete() on all the input or output ports that have been called, then marks the operator as stopped.

  2. final def failStage(ex: Throwable): Unit

    Automatically invokes cancel() or fail() on all the input or output ports that have been called, then marks the operator as stopped.

  3. final def getAsyncCallback[T](handler: (T) ⇒ Unit): AsyncCallback[T]

    Obtain a callback object that can be used asynchronously to re-enter the current GraphStage with an asynchronous notification.

    Obtain a callback object that can be used asynchronously to re-enter the current GraphStage with an asynchronous notification. The invoke() method of the returned AsyncCallback 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 and onPull.

    This object can be cached and reused within the same GraphStageLogic.

  4. val inCount: Int
  5. final def isAvailable[T](out: Outlet[T]): Boolean

    Return true if the given output port is ready to be pushed.

  6. val outCount: Int
  7. def postStop(): Unit

    Invoked after processing of external events stopped because the operator is about to stop or fail.

    Invoked after processing of external events stopped because the operator is about to stop or fail.

    Annotations
    @throws( classOf[Exception] )
  8. def preStart(): Unit

    Invoked before any external events are processed, at the startup of the operator.

    Invoked before any external events are processed, at the startup of the operator.

    Annotations
    @throws( classOf[Exception] )
  9. final def stageActor: StageActor