kstokoz opened a new issue, #2620:
URL: https://github.com/apache/pekko/issues/2620
I was moving my project from pekko 1.0.1 to 1.2.0. One of my test which
using source.recoverWithRetries failed.
I believe in change #1775 and #1663 merged to pekko 1.2.0 release in
case of Source.failed semantics of the API is actualy changed, i.e. max
attempts of -1 is no longer working properly.
Please consider following test:
```
import java.util.concurrent.atomic.AtomicInteger
import org.apache.pekko.stream.scaladsl.Sink
import org.apache.pekko.stream.scaladsl.Source
import org.apache.pekko.util.ByteString
import org.apache.pekko.NotUsed
import scala.concurrent.Await
import scala.concurrent.duration.Duration
class ResilientSourceTest extends UnitTest {
def withRetriesTest(originSource: Source[ByteString, Any])(fallbackTo:
Long => Source[ByteString, NotUsed])(shouldRetry: Throwable => Boolean = { _ =>
true }): Source[ByteString, NotUsed] =
originSource.recoverWithRetries(
-1,
{
case e: Throwable if shouldRetry(e) =>
fallbackTo(0)
}
).mapMaterializedValue(_ => NotUsed)
test("withRetries should stop to retry if shouldRetry decides otherwise") {
val counter = new AtomicInteger()
val source =
withRetriesTest(failedSource("origin")) { _ =>
counter.incrementAndGet()
// failedSource1("works")
failedSource("does not work")
} { _ =>
counter.get() < 3
}
assertThrows[ArithmeticException] {
Await.result(source.runWith(Sink.ignore), Duration.Inf)
}
assert(counter.get() == 3)
}
private def failedSource(message: String): Source[ByteString, NotUsed] =
Source.failed(new ArithmeticException(message))
private def failedSource1(message: String): Source[ByteString, NotUsed] =
Source.single(5).map(_ / 0).map(s => ByteString.fromString(s.toString))
}
```
When i have Source.failed (case failedSource) test is not passing, while i
would expect it should, similar if source would produce error during execution
(case failedSource1)
Regards,
Kyrylo
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]