!str,htc replace and remove OneBoundedInterpreter
main work by @drewhk with contributions from @2m and @rkuhn This work uncovered many well-hidden bugs in existing Stages, in particular StatefulStage. These were hidden by the behavior of OneBoundedInterpreter that normally behaves more orderly than it guarantees in general, especially with respect to the timeliness of delivery of upstream termination signals; the bugs were then that internal state was not flushed when onComplete arrived “too early”.
This commit is contained in:
parent
20f54435f1
commit
556012b7ee
107 changed files with 2456 additions and 3061 deletions
|
|
@ -5,7 +5,7 @@ package akka.stream.scaladsl
|
|||
|
||||
import akka.actor.{ ActorRef, Cancellable, Props }
|
||||
import akka.stream.actor.ActorPublisher
|
||||
import akka.stream.impl.Stages.{ DefaultAttributes, MaterializingStageFactory, StageModule }
|
||||
import akka.stream.impl.Stages.{ DefaultAttributes, StageModule }
|
||||
import akka.stream.impl.StreamLayout.Module
|
||||
import akka.stream.impl.fusing.GraphStages.TickSource
|
||||
import akka.stream.impl.{ EmptyPublisher, ErrorPublisher, _ }
|
||||
|
|
@ -32,7 +32,7 @@ final class Source[+Out, +Mat](private[stream] override val module: Module)
|
|||
override val shape: SourceShape[Out] = module.shape.asInstanceOf[SourceShape[Out]]
|
||||
|
||||
def viaMat[T, Mat2, Mat3](flow: Graph[FlowShape[Out, T], Mat2])(combine: (Mat, Mat2) ⇒ Mat3): Source[T, Mat3] = {
|
||||
if (flow.module.isInstanceOf[Stages.Identity]) this.asInstanceOf[Source[T, Mat3]]
|
||||
if (flow.module eq Stages.identityGraph.module) this.asInstanceOf[Source[T, Mat3]]
|
||||
else {
|
||||
val flowCopy = flow.module.carbonCopy
|
||||
new Source(
|
||||
|
|
@ -64,7 +64,7 @@ final class Source[+Out, +Mat](private[stream] override val module: Module)
|
|||
new Source(module.transformMaterializedValue(f.asInstanceOf[Any ⇒ Any]))
|
||||
|
||||
/** INTERNAL API */
|
||||
override private[scaladsl] def andThen[U](op: StageModule): Repr[U, Mat] = {
|
||||
override private[scaladsl] def deprecatedAndThen[U](op: StageModule): Repr[U, Mat] = {
|
||||
// No need to copy here, op is a fresh instance
|
||||
new Source(
|
||||
module
|
||||
|
|
@ -72,13 +72,6 @@ final class Source[+Out, +Mat](private[stream] override val module: Module)
|
|||
.replaceShape(SourceShape(op.outPort)))
|
||||
}
|
||||
|
||||
override private[scaladsl] def andThenMat[U, Mat2](op: MaterializingStageFactory): Repr[U, Mat2] = {
|
||||
new Source(
|
||||
module
|
||||
.fuse(op, shape.outlet, op.inPort, Keep.right)
|
||||
.replaceShape(SourceShape(op.outPort)))
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect this `Source` to a `Sink` and run it. The returned value is the materialized value
|
||||
* of the `Sink`, e.g. the `Publisher` of a [[akka.stream.scaladsl.Sink#publisher]].
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue