=str #16751 Update to reactive-streams 1.0-RC3
Changed rules: * 1.9 Always onSubscribe prior to any other signals * 1.9 NullPointerException if subscriber is null * 3.17 Long overflow, effectively unbounded instead of onError Fixed some more things: * fixed some FIXME * Long drop and take * memory leaks in tck tests, use BeforeClass to create ActorSystem use AfterClass to shutdown ActorSystem * more tck tests * don't emit OnComplete when substream is cancelled * work around for memory leak in PrefixAndTail
This commit is contained in:
parent
e3e01d2c9b
commit
23c533fdd5
79 changed files with 862 additions and 414 deletions
|
|
@ -83,7 +83,7 @@ final class PublisherSource[Out](p: Publisher[Out], val attributes: OperationAtt
|
|||
* may happen before or after materializing the `Flow`.
|
||||
* The stream terminates with an error if the `Future` is completed with a failure.
|
||||
*/
|
||||
final class FutureSource[Out](future: Future[Out], val attributes: OperationAttributes, shape: SourceShape[Out]) extends SourceModule[Out, Unit](shape) { // FIXME Why does this have anything to do with Actors?
|
||||
final class FutureSource[Out](future: Future[Out], val attributes: OperationAttributes, shape: SourceShape[Out]) extends SourceModule[Out, Unit](shape) {
|
||||
override def create(materializer: ActorFlowMaterializerImpl, flowName: String) =
|
||||
future.value match {
|
||||
case Some(Success(element)) ⇒
|
||||
|
|
@ -105,15 +105,12 @@ final class LazyEmptySource[Out](val attributes: OperationAttributes, shape: Sou
|
|||
override def create(materializer: ActorFlowMaterializerImpl, flowName: String) = {
|
||||
val p = Promise[Unit]()
|
||||
|
||||
// Not TCK verified as RC1 does not allow "empty publishers",
|
||||
// reactive-streams on master now contains support for empty publishers.
|
||||
// so we can enable it then, though it will require external completing of the promise
|
||||
val pub = new Publisher[Unit] {
|
||||
override def subscribe(s: Subscriber[_ >: Unit]) = {
|
||||
requireNonNullSubscriber(s)
|
||||
tryOnSubscribe(s, new Subscription {
|
||||
override def request(n: Long): Unit = ()
|
||||
|
||||
override def cancel(): Unit = p.success(())
|
||||
override def cancel(): Unit = p.trySuccess(())
|
||||
})
|
||||
p.future.onComplete {
|
||||
case Success(_) ⇒ tryOnComplete(s)
|
||||
|
|
@ -136,7 +133,7 @@ final class LazyEmptySource[Out](val attributes: OperationAttributes, shape: Sou
|
|||
* element is produced it will not receive that tick element later. It will
|
||||
* receive new tick elements as soon as it has requested more elements.
|
||||
*/
|
||||
final class TickSource[Out](initialDelay: FiniteDuration, interval: FiniteDuration, tick: Out, val attributes: OperationAttributes, shape: SourceShape[Out]) extends SourceModule[Out, Cancellable](shape) { // FIXME Why does this have anything to do with Actors?
|
||||
final class TickSource[Out](initialDelay: FiniteDuration, interval: FiniteDuration, tick: Out, val attributes: OperationAttributes, shape: SourceShape[Out]) extends SourceModule[Out, Cancellable](shape) {
|
||||
|
||||
override def create(materializer: ActorFlowMaterializerImpl, flowName: String) = {
|
||||
val cancelled = new AtomicBoolean(false)
|
||||
|
|
@ -169,4 +166,4 @@ final class PropsSource[Out](props: Props, val attributes: OperationAttributes,
|
|||
|
||||
override protected def newInstance(shape: SourceShape[Out]): SourceModule[Out, ActorRef] = new PropsSource[Out](props, attributes, shape)
|
||||
override def withAttributes(attr: OperationAttributes): Module = new PropsSource(props, attr, shape)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue