Fixed bug in Chunker, exposed by interpreter changes

This commit is contained in:
Endre Sándor Varga 2016-08-01 12:20:30 +02:00
parent b8ceb863c9
commit 083bfb6692
3 changed files with 22 additions and 5 deletions

View file

@ -100,8 +100,15 @@ public class RecipeByteStrings extends RecipeTest {
@Override @Override
public void onUpstreamFinish() throws Exception { public void onUpstreamFinish() throws Exception {
if (buffer.isEmpty()) completeStage(); if (buffer.isEmpty()) completeStage();
// elements left in buffer, keep accepting downstream pulls else {
// and push from buffer until buffer is emitted // There are elements left in buffer, so
// we keep accepting downstream pulls and push from buffer until emptied.
//
// It might be though, that the upstream finished while it was pulled, in which
// case we will not get an onPull from the downstream, because we already had one.
// In that case we need to emit from the buffer.
if (isAvailable(out)) emitChunk();
}
} }
}); });
} }

View file

@ -42,8 +42,15 @@ class RecipeByteStrings extends RecipeSpec {
override def onUpstreamFinish(): Unit = { override def onUpstreamFinish(): Unit = {
if (buffer.isEmpty) completeStage() if (buffer.isEmpty) completeStage()
// elements left in buffer, keep accepting downstream pulls else {
// and push from buffer until buffer is emitted // There are elements left in buffer, so
// we keep accepting downstream pulls and push from buffer until emptied.
//
// It might be though, that the upstream finished while it was pulled, in which
// case we will not get an onPull from the downstream, because we already had one.
// In that case we need to emit from the buffer.
if (isAvailable(out)) emitChunk()
}
} }
}) })

View file

@ -903,7 +903,10 @@ object MiMa extends AutoPlugin {
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.pubsub.protobuf.msg.DistributedPubSubMessages#StatusOrBuilder.hasReplyToStatus"), ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.cluster.pubsub.protobuf.msg.DistributedPubSubMessages#StatusOrBuilder.hasReplyToStatus"),
// #20543 GraphStage subtypes should not be private to akka // #20543 GraphStage subtypes should not be private to akka
ProblemFilters.exclude[DirectAbstractMethodProblem]("akka.stream.ActorMaterializer.actorOf") ProblemFilters.exclude[DirectAbstractMethodProblem]("akka.stream.ActorMaterializer.actorOf"),
// Interpreter internals change
ProblemFilters.exclude[IncompatibleResultTypeProblem]("akka.stream.stage.GraphStageLogic.portToConn")
), ),
"2.4.9" -> Seq( "2.4.9" -> Seq(
// #20994 adding new decode method, since we're on JDK7+ now // #20994 adding new decode method, since we're on JDK7+ now