Enable fatal errors for docs (#29570)

This commit is contained in:
Arnout Engelen 2020-09-08 15:10:21 +02:00 committed by GitHub
parent e0ceb71ccd
commit ca59d8149c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
55 changed files with 268 additions and 223 deletions

View file

@ -41,7 +41,7 @@ final case class Message(s: String)
//#context-actorOf
class FirstActor extends Actor {
val child = context.actorOf(Props[MyActor], name = "myChild")
val child = context.actorOf(Props[MyActor](), name = "myChild")
//#plus-some-behavior
def receive = {
case x => sender() ! x
@ -124,7 +124,7 @@ class Hook extends Actor {
var child: ActorRef = _
//#preStart
override def preStart(): Unit = {
child = context.actorOf(Props[MyActor], "child")
child = context.actorOf(Props[MyActor](), "child")
}
//#preStart
def receive = Actor.emptyBehavior
@ -182,7 +182,7 @@ object Manager {
class Manager extends Actor {
import Manager._
val worker = context.watch(context.actorOf(Props[Cruncher], "worker"))
val worker = context.watch(context.actorOf(Props[Cruncher](), "worker"))
def receive = {
case "job" => worker ! "crunch"
@ -224,7 +224,7 @@ class Swapper extends Actor {
object SwapperApp extends App {
val system = ActorSystem("SwapperSystem")
val swap = system.actorOf(Props[Swapper], name = "swapper")
val swap = system.actorOf(Props[Swapper](), name = "swapper")
swap ! Swap // logs Hi
swap ! Swap // logs Ho
swap ! Swap // logs Hi
@ -328,7 +328,7 @@ class ActorDocSpec extends AkkaSpec("""
//#import-context
class FirstActor extends Actor {
import context._
val myActor = actorOf(Props[MyActor], name = "myactor")
val myActor = actorOf(Props[MyActor](), name = "myactor")
def receive = {
case x => myActor ! x
}
@ -341,7 +341,7 @@ class ActorDocSpec extends AkkaSpec("""
}
"creating actor with system.actorOf" in {
val myActor = system.actorOf(Props[MyActor])
val myActor = system.actorOf(Props[MyActor]())
// testing the actor
@ -369,7 +369,7 @@ class ActorDocSpec extends AkkaSpec("""
//#fiddle_code
val system = ActorSystem("pingpong")
val pinger = system.actorOf(Props[Pinger], "pinger")
val pinger = system.actorOf(Props[Pinger](), "pinger")
val ponger = system.actorOf(Props(classOf[Ponger], pinger), "ponger")
@ -397,7 +397,7 @@ class ActorDocSpec extends AkkaSpec("""
}
"use poison pill" in {
val victim = system.actorOf(Props[MyActor])
val victim = system.actorOf(Props[MyActor]())
//#poison-pill
watch(victim)
victim ! PoisonPill
@ -409,7 +409,7 @@ class ActorDocSpec extends AkkaSpec("""
//#creating-props
import akka.actor.Props
val props1 = Props[MyActor]
val props1 = Props[MyActor]()
val props2 = Props(new ActorWithArgs("arg")) // careful, see below
val props3 = Props(classOf[ActorWithArgs], "arg") // no support for value class arguments
//#creating-props
@ -427,7 +427,7 @@ class ActorDocSpec extends AkkaSpec("""
// ActorSystem is a heavy object: create only one per application
val system = ActorSystem("mySystem")
val myActor = system.actorOf(Props[MyActor], "myactor2")
val myActor = system.actorOf(Props[MyActor](), "myactor2")
//#system-actorOf
shutdown(system)
}
@ -480,7 +480,7 @@ class ActorDocSpec extends AkkaSpec("""
}
"using implicit timeout" in {
val myActor = system.actorOf(Props[FirstActor])
val myActor = system.actorOf(Props[FirstActor]())
//#using-implicit-timeout
import scala.concurrent.duration._
import akka.util.Timeout
@ -493,7 +493,7 @@ class ActorDocSpec extends AkkaSpec("""
}
"using explicit timeout" in {
val myActor = system.actorOf(Props[FirstActor])
val myActor = system.actorOf(Props[FirstActor]())
//#using-explicit-timeout
import scala.concurrent.duration._
import akka.pattern.ask
@ -658,7 +658,7 @@ class ActorDocSpec extends AkkaSpec("""
}
"using pattern gracefulStop" in {
val actorRef = system.actorOf(Props[Manager])
val actorRef = system.actorOf(Props[Manager]())
//#gracefulStop
import akka.pattern.gracefulStop
import scala.concurrent.Await

View file

@ -56,7 +56,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
//#when-syntax
when(Idle) {
case Event(SetTarget(ref), Uninitialized) =>
stay.using(Todo(ref, Vector.empty))
stay().using(Todo(ref, Vector.empty))
}
//#when-syntax
@ -85,7 +85,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
case Event(e, s) =>
log.warning("received unhandled request {} in state {}/{}", e, stateName, s)
stay
stay()
}
//#unhandled-elided
//#fsm-body
@ -140,7 +140,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
//#transform-syntax
when(SomeState)(transform {
case Event(bytes: ByteString, read) => stay.using(read + bytes.length)
case Event(bytes: ByteString, read) => stay().using(read + bytes.length)
}.using {
case s @ FSM.State(state, read, timeout, stopReason, replies) if read > 1000 =>
goto(Processing)
@ -154,7 +154,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
}
when(SomeState)(transform {
case Event(bytes: ByteString, read) => stay.using(read + bytes.length)
case Event(bytes: ByteString, read) => stay().using(read + bytes.length)
}.using(processingTrigger))
//#alt-transform-syntax
@ -170,7 +170,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
whenUnhandled {
case Event(x: X, data) =>
log.info("Received unhandled event: " + x)
stay
stay()
case Event(msg, _) =>
log.warning("Received unknown event: " + msg)
goto(Error)
@ -226,7 +226,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit {
"not batch if uninitialized" in {
val buncher = system.actorOf(Props(classOf[Buncher], this))
buncher ! Queue(42)
expectNoMsg
expectNoMessage()
}
}
}

View file

@ -32,8 +32,8 @@ object FaultHandlingDocSample extends App {
""")
val system = ActorSystem("FaultToleranceSample", config)
val worker = system.actorOf(Props[Worker], name = "worker")
val listener = system.actorOf(Props[Listener], name = "listener")
val worker = system.actorOf(Props[Worker](), name = "worker")
val listener = system.actorOf(Props[Listener](), name = "listener")
// start the work and listen on progress
// note that the listener is used as sender of the tell,
// i.e. it will receive replies from the worker
@ -90,7 +90,7 @@ class Worker extends Actor with ActorLogging {
// The sender of the initial Start message will continuously be notified
// about progress
var progressListener: Option[ActorRef] = None
val counterService = context.actorOf(Props[CounterService], name = "counter")
val counterService = context.actorOf(Props[CounterService](), name = "counter")
val totalCount = 51
import context.dispatcher // Use this Actors' Dispatcher as ExecutionContext
@ -160,7 +160,7 @@ class CounterService extends Actor {
* Watch the child so we receive Terminated message when it has been terminated.
*/
def initStorage(): Unit = {
storage = Some(context.watch(context.actorOf(Props[Storage], name = "storage")))
storage = Some(context.watch(context.actorOf(Props[Storage](), name = "storage")))
// Tell the counter, if any, to use the new storage
counter.foreach { _ ! UseStorage(storage) }
// We need the initial value to be able to operate

View file

@ -120,7 +120,7 @@ class FaultHandlingDocSpec(_system: ActorSystem)
}
""")))
override def afterAll: Unit = {
override def afterAll(): Unit = {
TestKit.shutdownActorSystem(system)
}
@ -129,9 +129,9 @@ class FaultHandlingDocSpec(_system: ActorSystem)
//#testkit
//#create
val supervisor = system.actorOf(Props[Supervisor], "supervisor")
val supervisor = system.actorOf(Props[Supervisor](), "supervisor")
supervisor ! Props[Child]
supervisor ! Props[Child]()
val child = expectMsgType[ActorRef] // retrieve answer from TestKits testActor
//#create
EventFilter.warning(occurrences = 1).intercept {
@ -161,7 +161,7 @@ class FaultHandlingDocSpec(_system: ActorSystem)
}
EventFilter[Exception]("CRASH", occurrences = 2).intercept {
//#escalate-kill
supervisor ! Props[Child] // create new child
supervisor ! Props[Child]() // create new child
val child2 = expectMsgType[ActorRef]
watch(child2)
child2 ! "get" // verify it is alive
@ -173,9 +173,9 @@ class FaultHandlingDocSpec(_system: ActorSystem)
}
//#escalate-kill
//#escalate-restart
val supervisor2 = system.actorOf(Props[Supervisor2], "supervisor2")
val supervisor2 = system.actorOf(Props[Supervisor2](), "supervisor2")
supervisor2 ! Props[Child]
supervisor2 ! Props[Child]()
val child3 = expectMsgType[ActorRef]
child3 ! 23

View file

@ -58,11 +58,11 @@ class InitializationDocSpec extends AkkaSpec with ImplicitSender {
"Message based initialization example" must {
"work correctly" in {
val example = system.actorOf(Props[MessageInitExample], "messageInitExample")
val example = system.actorOf(Props[MessageInitExample](), "messageInitExample")
val probe = "U OK?"
example ! probe
expectNoMsg()
expectNoMessage()
example ! "init"
example ! probe

View file

@ -38,7 +38,7 @@ class PropsEdgeCaseSpec extends AnyWordSpec with CompileOnlySpec {
case x: Int => sender() ! (x * b)
}
}
val defaultValueProp2 = Props[DefaultValueActor2] // Unsupported
val defaultValueProp2 = Props[DefaultValueActor2]() // Unsupported
val defaultValueProp3 = Props(classOf[DefaultValueActor2]) // Unsupported
//#props-edge-cases-default-values
}

View file

@ -11,7 +11,7 @@ import scala.collection.mutable.ListBuffer
* Requirements are as follows:
* The first thing the actor needs to do, is to subscribe to a channel of events,
* Then it must replay (process) all "old" events
* Then it has to wait for a GoAhead signal to begin processing the new events
* Then it has to wait for a GoAhead message to begin processing the new events
* It mustn't "miss" events that happen between catching up with the old events and getting the GoAhead signal
*/
class UnnestedReceives extends Actor {
@ -26,21 +26,21 @@ class UnnestedReceives extends Actor {
//This method retrieves all prior messages/events
def allOldMessages() = List()
override def preStart: Unit = {
override def preStart(): Unit = {
//We override preStart to be sure that the first message the actor gets is
//'Replay, that message will start to be processed _after_ the actor is started
self ! 'Replay
//Replay, that message will start to be processed _after_ the actor is started
self ! "Replay"
//Then we subscribe to the stream of messages/events
subscribe()
}
def receive = {
case 'Replay => //Our first message should be a 'Replay message, all others are invalid
case "Replay" => //Our first message should be a Replay message, all others are invalid
allOldMessages().foreach(process) //Process all old messages/events
become { //Switch behavior to look for the GoAhead signal
case 'GoAhead => //When we get the GoAhead signal we process all our buffered messages/events
case "GoAhead" => //When we get the GoAhead signal we process all our buffered messages/events
queue.foreach(process)
queue.clear
queue.clear()
become { //Then we change behavior to process incoming messages/events as they arrive
case msg => process(msg)
}

View file

@ -51,7 +51,7 @@ class CoordinatedActorShutdownSpec {
}
def showCancel: Unit = {
def showCancel(): Unit = {
val system = ActorSystem(root, "main")
def cleanup(): Unit = {}

View file

@ -48,8 +48,8 @@ object FactorialBackend {
.withFallback(ConfigFactory.load("factorial"))
val system = ActorSystem("ClusterSystem", config)
system.actorOf(Props[FactorialBackend], name = "factorialBackend")
system.actorOf(Props[FactorialBackend](), name = "factorialBackend")
system.actorOf(Props[MetricsListener], name = "metricsListener")
system.actorOf(Props[MetricsListener](), name = "metricsListener")
}
}

View file

@ -101,7 +101,7 @@ abstract class FactorialFrontend3 extends Actor {
totalInstances = 100,
maxInstancesPerNode = 3,
allowLocalRoutees = false,
useRoles = Set("backend"))).props(Props[FactorialBackend]),
useRoles = Set("backend"))).props(Props[FactorialBackend]()),
name = "factorialBackendRouter3")
//#router-deploy-in-code
}

View file

@ -52,6 +52,6 @@ object TransformationBackend {
.withFallback(ConfigFactory.load())
val system = ActorSystem("ClusterSystem", config)
system.actorOf(Props[TransformationBackend], name = "backend")
system.actorOf(Props[TransformationBackend](), name = "backend")
}
}

View file

@ -51,7 +51,7 @@ object TransformationFrontend {
.withFallback(ConfigFactory.load())
val system = ActorSystem("ClusterSystem", config)
val frontend = system.actorOf(Props[TransformationFrontend], name = "frontend")
val frontend = system.actorOf(Props[TransformationFrontend](), name = "frontend")
val counter = new AtomicInteger
import system.dispatcher

View file

@ -37,7 +37,7 @@ class SampleLease(settings: LeaseSettings) extends Lease(settings) {
object LeaseDocSpec {
def config() =
def config =
ConfigFactory.parseString("""
jdocs-lease.lease-class = "jdocs.coordination.LeaseDocTest$SampleLease"
#lease-config

View file

@ -240,11 +240,11 @@ object DispatcherDocSpec {
extends UnboundedStablePriorityMailbox(
// Create a new PriorityGenerator, lower prio means more important
PriorityGenerator {
// 'highpriority messages should be treated first if possible
case 'highpriority => 0
// highpriority messages should be treated first if possible
case "highpriority" => 0
// 'lowpriority messages should be treated last if possible
case 'lowpriority => 2
// lowpriority messages should be treated last if possible
case "lowpriority" => 2
// PoisonPill when no other left
case PoisonPill => 3
@ -293,7 +293,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-dispatcher-in-config
import akka.actor.Props
val myActor = context.actorOf(Props[MyActor], "myactor")
val myActor = context.actorOf(Props[MyActor](), "myactor")
//#defining-dispatcher-in-config
}
@ -302,7 +302,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
//#defining-dispatcher-in-code
import akka.actor.Props
val myActor =
context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")
context.actorOf(Props[MyActor]().withDispatcher("my-dispatcher"), "myactor1")
//#defining-dispatcher-in-code
}
@ -314,7 +314,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-fixed-pool-size-dispatcher
val myActor =
context.actorOf(Props[MyActor].withDispatcher("blocking-io-dispatcher"), "myactor2")
context.actorOf(Props[MyActor]().withDispatcher("blocking-io-dispatcher"), "myactor2")
//#defining-fixed-pool-size-dispatcher
}
@ -322,7 +322,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-pinned-dispatcher
val myActor =
context.actorOf(Props[MyActor].withDispatcher("my-pinned-dispatcher"), "myactor3")
context.actorOf(Props[MyActor]().withDispatcher("my-pinned-dispatcher"), "myactor3")
//#defining-pinned-dispatcher
}
@ -330,7 +330,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-affinity-pool-dispatcher
val myActor =
context.actorOf(Props[MyActor].withDispatcher("affinity-pool-dispatcher"), "myactor4")
context.actorOf(Props[MyActor]().withDispatcher("affinity-pool-dispatcher"), "myactor4")
//#defining-affinity-pool-dispatcher
}
@ -345,7 +345,7 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-mailbox-in-config
import akka.actor.Props
val myActor = context.actorOf(Props[MyActor], "priomailboxactor")
val myActor = context.actorOf(Props[MyActor](), "priomailboxactor")
//#defining-mailbox-in-config
}
@ -353,13 +353,13 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
val context = system
//#defining-mailbox-in-code
import akka.actor.Props
val myActor = context.actorOf(Props[MyActor].withMailbox("prio-mailbox"))
val myActor = context.actorOf(Props[MyActor]().withMailbox("prio-mailbox"))
//#defining-mailbox-in-code
}
"using a required mailbox" in {
val context = system
val myActor = context.actorOf(Props[MyBoundedActor])
val myActor = context.actorOf(Props[MyBoundedActor]())
}
"defining priority dispatcher" in {
@ -370,13 +370,14 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
class Logger extends Actor {
val log: LoggingAdapter = Logging(context.system, this)
self ! 'lowpriority
self ! 'lowpriority
self ! 'highpriority
self ! 'pigdog
self ! 'pigdog2
self ! 'pigdog3
self ! 'highpriority
self ! "lowpriority"
self ! "lowpriority"
self ! "highpriority"
self ! "pigdog"
self ! "pigdog2"
self ! "pigdog3"
self ! "highpriority"
self ! PoisonPill
def receive = {
@ -387,13 +388,13 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
/*
* Logs:
* 'highpriority
* 'highpriority
* 'pigdog
* 'pigdog2
* 'pigdog3
* 'lowpriority
* 'lowpriority
* highpriority
* highpriority
* pigdog
* pigdog2
* pigdog3
* lowpriority
* lowpriority
*/
//#prio-dispatcher
@ -410,8 +411,8 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
class Logger extends Actor {
val log: LoggingAdapter = Logging(context.system, this)
self ! 'foo
self ! 'bar
self ! "foo"
self ! "bar"
self ! MyControlMessage
self ! PoisonPill
@ -424,8 +425,8 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
/*
* Logs:
* MyControlMessage
* 'foo
* 'bar
* foo
* bar
*/
//#control-aware-dispatcher
@ -435,11 +436,11 @@ class DispatcherDocSpec extends AkkaSpec(DispatcherDocSpec.config) {
}
"require custom mailbox on dispatcher" in {
val myActor = system.actorOf(Props[MyActor].withDispatcher("custom-dispatcher"))
val myActor = system.actorOf(Props[MyActor]().withDispatcher("custom-dispatcher"))
}
"require custom mailbox on actor" in {
val myActor = system.actorOf(Props[MySpecialActor])
val myActor = system.actorOf(Props[MySpecialActor]())
}
}

View file

@ -42,7 +42,7 @@ object EventBusDocSpec {
// determines the initial size of the index data structure
// used internally (i.e. the expected number of different classifiers)
override protected def mapSize: Int = 128
override protected def mapSize(): Int = 128
}
@ -199,7 +199,7 @@ class EventBusDocSpec extends AkkaSpec {
probe2.expectMsg(Notification(observer1, 100))
actorBus.publish(Notification(observer2, 101))
probe2.expectMsg(Notification(observer2, 101))
probe1.expectNoMsg(500.millis)
probe1.expectNoMessage(500.millis)
//#actor-bus-test
}
}

View file

@ -146,17 +146,17 @@ class LoggingDocSpec extends AkkaSpec {
import LoggingDocSpec.{ MdcActor, MdcActorMixin, MyActor, Req }
"use a logging actor" in {
val myActor = system.actorOf(Props[MyActor])
val myActor = system.actorOf(Props[MyActor]())
myActor ! "test"
}
"use a MDC logging actor" in {
val mdcActor = system.actorOf(Props[MdcActor])
val mdcActor = system.actorOf(Props[MdcActor]())
mdcActor ! "some request"
}
"use a MDC logging actor by mixin" in {
val mdcActor = system.actorOf(Props[MdcActorMixin])
val mdcActor = system.actorOf(Props[MdcActorMixin]())
mdcActor ! Req("some request", 5678)
}
@ -164,7 +164,7 @@ class LoggingDocSpec extends AkkaSpec {
import LoggingDocSpec.Listeners._
//#deadletters
val listener = system.actorOf(Props[DeadLetterListener])
val listener = system.actorOf(Props[DeadLetterListener]())
system.eventStream.subscribe(listener, classOf[DeadLetter])
//#deadletters
}
@ -173,8 +173,8 @@ class LoggingDocSpec extends AkkaSpec {
import LoggingDocSpec.Listeners._
//#superclass-subscription-eventstream
val jazzListener = system.actorOf(Props[Listener])
val musicListener = system.actorOf(Props[Listener])
val jazzListener = system.actorOf(Props[Listener]())
val musicListener = system.actorOf(Props[Listener]())
system.eventStream.subscribe(jazzListener, classOf[Jazz])
system.eventStream.subscribe(musicListener, classOf[AllKindsOfMusic])
@ -188,7 +188,7 @@ class LoggingDocSpec extends AkkaSpec {
"allow registration to suppressed dead letters" in {
import akka.actor.Props
val listener = system.actorOf(Props[MyActor])
val listener = system.actorOf(Props[MyActor]())
//#suppressed-deadletters
import akka.actor.SuppressedDeadLetter

View file

@ -85,7 +85,7 @@ class ExtensionDocSpec extends AkkaSpec(ExtensionDocSpec.config) {
"demonstrate how to create an extension in Scala" in {
//#extension-usage
CountExtension(system).increment
CountExtension(system).increment()
//#extension-usage
}

View file

@ -26,7 +26,7 @@ import akka.testkit.AkkaSpec
class SettingsImpl(config: Config) extends Extension {
val DbUri: String = config.getString("myapp.db.uri")
val CircuitBreakerTimeout: Duration =
Duration(config.getMilliseconds("myapp.circuit-breaker.timeout"), TimeUnit.MILLISECONDS)
Duration(config.getDuration("myapp.circuit-breaker.timeout", TimeUnit.MILLISECONDS), TimeUnit.MILLISECONDS)
}
//#extension

View file

@ -150,7 +150,7 @@ class FutureDocSpec extends AkkaSpec {
}
"demonstrate usage of blocking from actor" in {
val actor = system.actorOf(Props[MyActor])
val actor = system.actorOf(Props[MyActor]())
val msg = "hello"
//#ask-blocking
import scala.concurrent.Await
@ -167,7 +167,7 @@ class FutureDocSpec extends AkkaSpec {
}
"demonstrate usage of mapTo" in {
val actor = system.actorOf(Props[MyActor])
val actor = system.actorOf(Props[MyActor]())
val msg = "hello"
implicit val timeout = Timeout(5 seconds)
//#map-to
@ -280,9 +280,9 @@ class FutureDocSpec extends AkkaSpec {
}
"demonstrate wrong way of composing" in {
val actor1 = system.actorOf(Props[MyActor])
val actor2 = system.actorOf(Props[MyActor])
val actor3 = system.actorOf(Props[MyActor])
val actor1 = system.actorOf(Props[MyActor]())
val actor2 = system.actorOf(Props[MyActor]())
val actor3 = system.actorOf(Props[MyActor]())
val msg1 = 1
val msg2 = 2
implicit val timeout = Timeout(5 seconds)
@ -304,9 +304,9 @@ class FutureDocSpec extends AkkaSpec {
}
"demonstrate composing" in {
val actor1 = system.actorOf(Props[MyActor])
val actor2 = system.actorOf(Props[MyActor])
val actor3 = system.actorOf(Props[MyActor])
val actor1 = system.actorOf(Props[MyActor]())
val actor2 = system.actorOf(Props[MyActor]())
val actor3 = system.actorOf(Props[MyActor]())
val msg1 = 1
val msg2 = 2
implicit val timeout = Timeout(5 seconds)
@ -331,7 +331,7 @@ class FutureDocSpec extends AkkaSpec {
"demonstrate usage of sequence with actors" in {
implicit val timeout = Timeout(5 seconds)
val oddActor = system.actorOf(Props[OddActor])
val oddActor = system.actorOf(Props[OddActor]())
//#sequence-ask
// oddActor returns odd numbers sequentially from 1 as a List[Future[Int]]
val listOfFutures = List.fill(100)(akka.pattern.ask(oddActor, GetNext).mapTo[Int])
@ -368,7 +368,7 @@ class FutureDocSpec extends AkkaSpec {
//#fold
// Create a sequence of Futures
val futures = for (i <- 1 to 1000) yield Future(i * 2)
val futureSum = Future.fold(futures)(0)(_ + _)
val futureSum = Future.foldLeft(futures)(0)(_ + _)
futureSum.foreach(println)
//#fold
Await.result(futureSum, 3 seconds) should be(1001000)
@ -378,7 +378,7 @@ class FutureDocSpec extends AkkaSpec {
//#reduce
// Create a sequence of Futures
val futures = for (i <- 1 to 1000) yield Future(i * 2)
val futureSum = Future.reduce(futures)(_ + _)
val futureSum = Future.reduceLeft(futures)(_ + _)
futureSum.foreach(println)
//#reduce
Await.result(futureSum, 3 seconds) should be(1001000)
@ -386,7 +386,7 @@ class FutureDocSpec extends AkkaSpec {
"demonstrate usage of recover" in {
implicit val timeout = Timeout(5 seconds)
val actor = system.actorOf(Props[MyActor])
val actor = system.actorOf(Props[MyActor]())
val msg1 = -1
//#recover
val future = akka.pattern.ask(actor, msg1).recover {
@ -399,7 +399,7 @@ class FutureDocSpec extends AkkaSpec {
"demonstrate usage of recoverWith" in {
implicit val timeout = Timeout(5 seconds)
val actor = system.actorOf(Props[MyActor])
val actor = system.actorOf(Props[MyActor]())
val msg1 = -1
//#try-recover
val future = akka.pattern.ask(actor, msg1).recoverWith {

View file

@ -45,7 +45,7 @@ class Server extends Actor {
//#server
context.parent ! c
//#server
val handler = context.actorOf(Props[SimplisticHandler])
val handler = context.actorOf(Props[SimplisticHandler]())
val connection = sender()
connection ! Register(handler)
}
@ -106,7 +106,7 @@ class Client(remote: InetSocketAddress, listener: ActorRef) extends Actor {
class IODocSpec extends AkkaSpec {
class Parent extends Actor {
context.actorOf(Props[Server], "server")
context.actorOf(Props[Server](), "server")
def receive = {
case msg => testActor.forward(msg)
}

View file

@ -20,7 +20,7 @@ object PullReadingExample {
import context.system
override def preStart: Unit =
override def preStart(): Unit =
//#pull-mode-bind
IO(Tcp) ! Bind(self, new InetSocketAddress("localhost", 0), pullMode = true)
//#pull-mode-bind
@ -51,7 +51,7 @@ object PullReadingExample {
class PullEcho(connection: ActorRef) extends Actor {
//#pull-reading-echo
override def preStart: Unit = connection ! ResumeReading
override def preStart(): Unit = connection ! ResumeReading
def receive = {
case Received(data) => connection ! Write(data, Ack)

View file

@ -127,7 +127,7 @@ abstract class UdpDocSpec extends AkkaSpec {
listener ! Udp.SuspendReading
Thread.sleep(1000) // no way to find out when the above is finished
val send = system.actorOf(simpleSenderProps(local))
probe.expectNoMsg(500.millis)
probe.expectNoMessage(500.millis)
listener ! Udp.ResumeReading
probe.expectMsg("hello")
send ! "world"

View file

@ -14,7 +14,7 @@ import scala.collection.immutable
class PersistenceEventAdapterDocSpec(config: String) extends AkkaSpec(config) {
def this() {
def this() = {
this("""
akka.persistence.snapshot-store.plugin = "akka.persistence.snapshot-store.local"

View file

@ -147,7 +147,7 @@ trait SharedLeveldbPluginDocSpec {
//#shared-store-creation
import akka.persistence.journal.leveldb.SharedLeveldbStore
val store = system.actorOf(Props[SharedLeveldbStore], "store")
val store = system.actorOf(Props[SharedLeveldbStore](), "store")
//#shared-store-creation
}
}

View file

@ -51,7 +51,7 @@ class ExamplePersistentActor extends PersistentActor {
object PersistentActorExample extends App {
val system = ActorSystem("example")
val persistentActor = system.actorOf(Props[ExamplePersistentActor], "persistentActor-4-scala")
val persistentActor = system.actorOf(Props[ExamplePersistentActor](), "persistentActor-4-scala")
persistentActor ! Cmd("foo")
persistentActor ! Cmd("baz")

View file

@ -19,7 +19,7 @@ object LeveldbPersistenceQueryDocSpec {
val colors = Set("green", "black", "blue")
override def toJournal(event: Any): Any = event match {
case s: String =>
var tags = colors.foldLeft(Set.empty[String]) { (acc, c) =>
val tags = colors.foldLeft(Set.empty[String]) { (acc, c) =>
if (s.contains(c)) acc + c else acc
}
if (tags.isEmpty) event

View file

@ -40,7 +40,7 @@ class MyEventsByTagSource(tag: String, offset: Long, refreshInterval: FiniteDura
tryPush()
}
override def onDownstreamFinish(): Unit = {
override def onDownstreamFinish(cause: Throwable): Unit = {
// close connection if responsible for doing so
}
@ -94,7 +94,8 @@ class MyEventsByTagSource(tag: String, offset: Long, refreshInterval: FiniteDura
Offset.sequence(currentOffset),
rs.getString("persistence_id"),
rs.getLong("seq_nr"),
deserialized)
deserialized,
System.currentTimeMillis())
}
b.result()
} finally s.close()

View file

@ -199,7 +199,7 @@ object PersistenceQueryDocSpec {
class PersistenceQueryDocSpec(s: String) extends AkkaSpec(s) {
import PersistenceQueryDocSpec._
def this() {
def this() = {
this("""
akka.persistence.query.my-read-journal {
class = "docs.persistence.query.PersistenceQueryDocSpec$MyReadJournalProvider"

View file

@ -4,6 +4,8 @@
package docs.persistence.testkit
import java.util.UUID
import akka.Done
import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit
import org.scalatest.wordspec.AnyWordSpecLike
@ -17,14 +19,11 @@ import scala.concurrent.duration._
//#imports
class PersistenceInitSpec
extends ScalaTestWithActorTestKit(
"""
class PersistenceInitSpec extends ScalaTestWithActorTestKit(s"""
akka.persistence.journal.plugin = "akka.persistence.journal.inmem"
akka.persistence.snapshot-store.plugin = "akka.persistence.snapshot-store.local"
akka.persistence.snapshot-store.local.dir = "target/snapshot-${UUID.randomUUID().toString}"
""")
with AnyWordSpecLike {
""") with AnyWordSpecLike {
"PersistenceInit" should {
"initialize plugins" in {

View file

@ -36,7 +36,7 @@ class RemoteDeploymentDocSpec extends AkkaSpec("""
"demonstrate programmatic deployment" in {
//#deploy
val ref = system.actorOf(Props[SampleActor].withDeploy(Deploy(scope = RemoteScope(address))))
val ref = system.actorOf(Props[SampleActor]().withDeploy(Deploy(scope = RemoteScope(address))))
//#deploy
ref.path.address should be(address)
ref ! "test"
@ -61,7 +61,7 @@ class RemoteDeploymentDocSpec extends AkkaSpec("""
"demonstrate sampleActor" in {
//#sample-actor
val actor = system.actorOf(Props[SampleActor], "sampleActor")
val actor = system.actorOf(Props[SampleActor](), "sampleActor")
actor ! "Pretty slick"
//#sample-actor
}

View file

@ -55,7 +55,7 @@ class ConsistentHashingRouterDocSpec extends AkkaSpec with ImplicitSender {
}
val cache: ActorRef =
context.actorOf(ConsistentHashingPool(10, hashMapping = hashMapping).props(Props[Cache]), name = "cache")
context.actorOf(ConsistentHashingPool(10, hashMapping = hashMapping).props(Props[Cache]()), name = "cache")
cache ! ConsistentHashableEnvelope(message = Entry("hello", "HELLO"), hashKey = "hello")
cache ! ConsistentHashableEnvelope(message = Entry("hi", "HI"), hashKey = "hi")

View file

@ -117,7 +117,7 @@ class CustomRouterDocSpec extends AkkaSpec(CustomRouterDocSpec.config) with Impl
"demonstrate usage of custom router" in {
//#usage-1
for (n <- 1 to 10) system.actorOf(Props[Storage], "s" + n)
for (n <- 1 to 10) system.actorOf(Props[Storage](), "s" + n)
val paths = for (n <- 1 to 10) yield ("/user/s" + n)
val redundancy1: ActorRef =

View file

@ -299,7 +299,7 @@ router-dispatcher {}
class Master extends Actor {
var router = {
val routees = Vector.fill(5) {
val r = context.actorOf(Props[Worker])
val r = context.actorOf(Props[Worker]())
context.watch(r)
ActorRefRoutee(r)
}
@ -311,7 +311,7 @@ router-dispatcher {}
router.route(w, sender())
case Terminated(a) =>
router = router.removeRoutee(a)
val r = context.actorOf(Props[Worker])
val r = context.actorOf(Props[Worker]())
context.watch(r)
router = router.addRoutee(r)
}
@ -326,9 +326,9 @@ router-dispatcher {}
//#create-worker-actors
class Workers extends Actor {
context.actorOf(Props[Worker], name = "w1")
context.actorOf(Props[Worker], name = "w2")
context.actorOf(Props[Worker], name = "w3")
context.actorOf(Props[Worker](), name = "w1")
context.actorOf(Props[Worker](), name = "w2")
context.actorOf(Props[Worker](), name = "w3")
// ...
//#create-worker-actors
@ -345,12 +345,12 @@ router-dispatcher {}
//#round-robin-pool-1
val router1: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router1")
context.actorOf(FromConfig.props(Props[Worker]()), "router1")
//#round-robin-pool-1
//#round-robin-pool-2
val router2: ActorRef =
context.actorOf(RoundRobinPool(5).props(Props[Worker]), "router2")
context.actorOf(RoundRobinPool(5).props(Props[Worker]()), "router2")
//#round-robin-pool-2
//#round-robin-group-1
@ -365,12 +365,12 @@ router-dispatcher {}
//#random-pool-1
val router5: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router5")
context.actorOf(FromConfig.props(Props[Worker]()), "router5")
//#random-pool-1
//#random-pool-2
val router6: ActorRef =
context.actorOf(RandomPool(5).props(Props[Worker]), "router6")
context.actorOf(RandomPool(5).props(Props[Worker]()), "router6")
//#random-pool-2
//#random-group-1
@ -385,17 +385,17 @@ router-dispatcher {}
//#balancing-pool-1
val router9: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router9")
context.actorOf(FromConfig.props(Props[Worker]()), "router9")
//#balancing-pool-1
//#balancing-pool-2
val router10: ActorRef =
context.actorOf(BalancingPool(5).props(Props[Worker]), "router10")
context.actorOf(BalancingPool(5).props(Props[Worker]()), "router10")
//#balancing-pool-2
// #balancing-pool-3
val router10b: ActorRef =
context.actorOf(BalancingPool(20).props(Props[Worker]), "router10b")
context.actorOf(BalancingPool(20).props(Props[Worker]()), "router10b")
//#balancing-pool-3
for (i <- 1 to 100) router10b ! i
val threads10b = Thread.getAllStackTraces.keySet.asScala.filter { _.getName contains "router10b" }
@ -406,22 +406,22 @@ router-dispatcher {}
//#smallest-mailbox-pool-1
val router11: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router11")
context.actorOf(FromConfig.props(Props[Worker]()), "router11")
//#smallest-mailbox-pool-1
//#smallest-mailbox-pool-2
val router12: ActorRef =
context.actorOf(SmallestMailboxPool(5).props(Props[Worker]), "router12")
context.actorOf(SmallestMailboxPool(5).props(Props[Worker]()), "router12")
//#smallest-mailbox-pool-2
//#broadcast-pool-1
val router13: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router13")
context.actorOf(FromConfig.props(Props[Worker]()), "router13")
//#broadcast-pool-1
//#broadcast-pool-2
val router14: ActorRef =
context.actorOf(BroadcastPool(5).props(Props[Worker]), "router14")
context.actorOf(BroadcastPool(5).props(Props[Worker]()), "router14")
//#broadcast-pool-2
//#broadcast-group-1
@ -436,12 +436,12 @@ router-dispatcher {}
//#scatter-gather-pool-1
val router17: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router17")
context.actorOf(FromConfig.props(Props[Worker]()), "router17")
//#scatter-gather-pool-1
//#scatter-gather-pool-2
val router18: ActorRef =
context.actorOf(ScatterGatherFirstCompletedPool(5, within = 10.seconds).props(Props[Worker]), "router18")
context.actorOf(ScatterGatherFirstCompletedPool(5, within = 10.seconds).props(Props[Worker]()), "router18")
//#scatter-gather-pool-2
//#scatter-gather-group-1
@ -456,12 +456,12 @@ router-dispatcher {}
//#tail-chopping-pool-1
val router21: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router21")
context.actorOf(FromConfig.props(Props[Worker]()), "router21")
//#tail-chopping-pool-1
//#tail-chopping-pool-2
val router22: ActorRef =
context.actorOf(TailChoppingPool(5, within = 10.seconds, interval = 20.millis).props(Props[Worker]), "router22")
context.actorOf(TailChoppingPool(5, within = 10.seconds, interval = 20.millis).props(Props[Worker]()), "router22")
//#tail-chopping-pool-2
//#tail-chopping-group-1
@ -476,12 +476,12 @@ router-dispatcher {}
//#consistent-hashing-pool-1
val router25: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router25")
context.actorOf(FromConfig.props(Props[Worker]()), "router25")
//#consistent-hashing-pool-1
//#consistent-hashing-pool-2
val router26: ActorRef =
context.actorOf(ConsistentHashingPool(5).props(Props[Worker]), "router26")
context.actorOf(ConsistentHashingPool(5).props(Props[Worker]()), "router26")
//#consistent-hashing-pool-2
//#consistent-hashing-group-1
@ -496,18 +496,18 @@ router-dispatcher {}
//#resize-pool-1
val router29: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router29")
context.actorOf(FromConfig.props(Props[Worker]()), "router29")
//#resize-pool-1
//#resize-pool-2
val resizer = DefaultResizer(lowerBound = 2, upperBound = 15)
val router30: ActorRef =
context.actorOf(RoundRobinPool(5, Some(resizer)).props(Props[Worker]), "router30")
context.actorOf(RoundRobinPool(5, Some(resizer)).props(Props[Worker]()), "router30")
//#resize-pool-2
//#optimal-size-exploring-resize-pool
val router31: ActorRef =
context.actorOf(FromConfig.props(Props[Worker]), "router31")
context.actorOf(FromConfig.props(Props[Worker]()), "router31")
//#optimal-size-exploring-resize-pool
def receive = {
@ -528,11 +528,11 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
import RouterDocSpec._
//#create-workers
system.actorOf(Props[Workers], "workers")
system.actorOf(Props[Workers](), "workers")
//#create-workers
//#create-parent
system.actorOf(Props[Parent], "parent")
system.actorOf(Props[Parent](), "parent")
//#create-parent
"demonstrate dispatcher" in {
@ -540,13 +540,13 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
val router: ActorRef = system.actorOf(
// head router actor will run on "router-dispatcher" dispatcher
// Worker routees will run on "pool-dispatcher" dispatcher
RandomPool(5, routerDispatcher = "router-dispatcher").props(Props[Worker]),
RandomPool(5, routerDispatcher = "router-dispatcher").props(Props[Worker]()),
name = "poolWithDispatcher")
//#dispatchers
}
"demonstrate broadcast" in {
val router = system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]))
val router = system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]()))
//#broadcastDavyJonesWarning
import akka.routing.Broadcast
router ! Broadcast("Watch out for Davy Jones' locker")
@ -555,7 +555,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
}
"demonstrate PoisonPill" in {
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo])))
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]())))
//#poisonPill
import akka.actor.PoisonPill
router ! PoisonPill
@ -564,7 +564,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
}
"demonstrate broadcast of PoisonPill" in {
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo])))
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]())))
//#broadcastPoisonPill
import akka.actor.PoisonPill
import akka.routing.Broadcast
@ -574,7 +574,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
}
"demonstrate Kill" in {
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo])))
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]())))
//#kill
import akka.actor.Kill
router ! Kill
@ -583,7 +583,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
}
"demonstrate broadcast of Kill" in {
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo])))
val router = watch(system.actorOf(RoundRobinPool(nrOfInstances = 5).props(Props[Echo]())))
//#broadcastKill
import akka.actor.Kill
import akka.routing.Broadcast
@ -598,7 +598,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
import akka.remote.routing.RemoteRouterConfig
val addresses =
Seq(Address("akka", "remotesys", "otherhost", 1234), AddressFromURIString("akka://othersys@anotherhost:1234"))
val routerRemote = system.actorOf(RemoteRouterConfig(RoundRobinPool(5), addresses).props(Props[Echo]))
val routerRemote = system.actorOf(RemoteRouterConfig(RoundRobinPool(5), addresses).props(Props[Echo]()))
//#remoteRoutees
}
@ -609,7 +609,7 @@ class RouterDocSpec extends AkkaSpec(RouterDocSpec.config) with ImplicitSender {
import akka.remote.routing.RemoteRouterConfig
val addresses =
Seq(Address("akka", "remotesys", "otherhost", 1234), AddressFromURIString("akka://othersys@anotherhost:1234"))
val routerRemote = system.actorOf(RemoteRouterConfig(RoundRobinPool(5), addresses).props(Props[Echo]))
val routerRemote = system.actorOf(RemoteRouterConfig(RoundRobinPool(5), addresses).props(Props[Echo]()))
//#remoteRoutees-artery
}
}

View file

@ -4,8 +4,10 @@
package docs.stream
import akka.Done
import akka.NotUsed
import akka.actor.{ Actor, ActorSystem, Cancellable }
import akka.stream.CompletionStrategy
import akka.stream.Materializer
import akka.stream.{ ClosedShape, FlowShape, OverflowStrategy }
import akka.stream.scaladsl._
@ -99,7 +101,7 @@ class FlowDocSpec extends AkkaSpec with CompileOnlySpec {
Source(List(1, 2, 3))
// Create a source from a Future
Source.fromFuture(Future.successful("Hello Streams!"))
Source.future(Future.successful("Hello Streams!"))
// Create a source from a single element
Source.single("only one element")
@ -227,8 +229,13 @@ class FlowDocSpec extends AkkaSpec with CompileOnlySpec {
"source pre-materialization" in {
//#source-prematerialization
val completeWithDone: PartialFunction[Any, CompletionStrategy] = { case Done => CompletionStrategy.immediately }
val matValuePoweredSource =
Source.actorRef[String](bufferSize = 100, overflowStrategy = OverflowStrategy.fail)
Source.actorRef[String](
completionMatcher = completeWithDone,
failureMatcher = PartialFunction.empty,
bufferSize = 100,
overflowStrategy = OverflowStrategy.fail)
val (actorRef, source) = matValuePoweredSource.preMaterialize()

View file

@ -42,7 +42,7 @@ class FlowStreamRefsDocSpec extends AkkaSpec with CompileOnlySpec {
//#offer-source
//#offer-source-use
val sourceActor = system.actorOf(Props[DataSource], "dataSource")
val sourceActor = system.actorOf(Props[DataSource](), "dataSource")
sourceActor ! RequestLogs(1337)
val offer = expectMsgType[LogsOffer]
@ -87,7 +87,7 @@ class FlowStreamRefsDocSpec extends AkkaSpec with CompileOnlySpec {
def localMetrics(): Source[String, NotUsed] = Source.single("")
//#offer-sink-use
val receiver = system.actorOf(Props[DataReceiver], "receiver")
val receiver = system.actorOf(Props[DataReceiver](), "receiver")
receiver ! PrepareUpload("system-42-tmp")
val ready = expectMsgType[MeasurementsSinkReady]

View file

@ -506,7 +506,7 @@ class GraphStageDocSpec extends AkkaSpec {
if (buffer.isEmpty) {
downstreamWaiting = true
} else {
val elem = buffer.dequeue
val elem = buffer.dequeue()
push(out, elem)
}
if (!bufferFull && !hasBeenPulled(in)) {

View file

@ -4,9 +4,10 @@
package docs.stream
import akka.NotUsed
import scala.concurrent.duration._
import akka.Done
import akka.NotUsed
import akka.testkit.AkkaSpec
import akka.stream.scaladsl._
import akka.stream._
@ -134,7 +135,7 @@ class IntegrationDocSpec extends AkkaSpec(IntegrationDocSpec.config) {
import TwitterStreamQuickstartDocSpec._
import IntegrationDocSpec._
val ref: ActorRef = system.actorOf(Props[Translator])
val ref: ActorRef = system.actorOf(Props[Translator]())
"ask" in {
//#ask
@ -494,16 +495,25 @@ class IntegrationDocSpec extends AkkaSpec(IntegrationDocSpec.config) {
//#source-actorRef
val bufferSize = 10
val cm: PartialFunction[Any, CompletionStrategy] = {
case Done =>
CompletionStrategy.immediately
}
val ref = Source
.actorRef[Int](bufferSize, OverflowStrategy.fail) // note: backpressure is not supported
.actorRef[Int](
completionMatcher = cm,
failureMatcher = PartialFunction.empty[Any, Throwable],
bufferSize = bufferSize,
overflowStrategy = OverflowStrategy.fail) // note: backpressure is not supported
.map(x => x * x)
.toMat(Sink.foreach(x => println(s"completed $x")))(Keep.left)
.toMat(Sink.foreach((x: Int) => println(s"completed $x")))(Keep.left)
.run()
ref ! 1
ref ! 2
ref ! 3
ref ! akka.actor.Status.Success("done")
ref ! Done
//#source-actorRef
}
}

View file

@ -28,7 +28,11 @@ class RateTransformationDocSpec extends AkkaSpec {
//#conflate-summarize
val fut =
Source.fromIterator(() => Iterator.continually(Random.nextGaussian)).via(statsFlow).grouped(10).runWith(Sink.head)
Source
.fromIterator(() => Iterator.continually(Random.nextGaussian()))
.via(statsFlow)
.grouped(10)
.runWith(Sink.head)
fut.futureValue
}
@ -38,7 +42,7 @@ class RateTransformationDocSpec extends AkkaSpec {
val p = 0.01
val sampleFlow = Flow[Double]
.conflateWithSeed(immutable.Seq(_)) {
case (acc, elem) if Random.nextDouble < p => acc :+ elem
case (acc, elem) if Random.nextDouble() < p => acc :+ elem
case (acc, _) => acc
}
.mapConcat(identity)

View file

@ -41,9 +41,9 @@ class ReactiveStreamsDocSpec extends AkkaSpec {
override def tweets: Publisher[Tweet] =
TwitterStreamQuickstartDocSpec.tweets.runWith(Sink.asPublisher(fanout = false))
override def storage = TestSubscriber.manualProbe[Author]
override def storage = TestSubscriber.manualProbe[Author]()
override def alert = TestSubscriber.manualProbe[Author]
override def alert = TestSubscriber.manualProbe[Author]()
}
def assertResult(storage: TestSubscriber.ManualProbe[Author]): Unit = {

View file

@ -41,7 +41,7 @@ class RestartDocSpec extends AkkaSpec with CompileOnlySpec {
maxRestarts = 20 // limits the amount of restarts to 20
) { () =>
// Create a source from a future of a source
Source.fromFutureSource {
Source.futureSource {
// Make a single request with akka-http
Http()
.singleRequest(HttpRequest(uri = "http://example.com/eventstream"))

View file

@ -114,7 +114,7 @@ class StreamPartialGraphDSLDocSpec extends AkkaSpec {
"combine sinks with simplified API" in {
val actorRef: ActorRef = testActor
//#sink-combine
val sendRmotely = Sink.actorRef(actorRef, "Done")
val sendRmotely = Sink.actorRef(actorRef, "Done", _ => "Failed")
val localProcessing = Sink.foreach[Int](_ => /* do something useful */ ())
val sink = Sink.combine(sendRmotely, localProcessing)(Broadcast[Int](_))

View file

@ -4,12 +4,14 @@
package docs.stream
import akka.stream._
import akka.stream.scaladsl._
import akka.stream.testkit.scaladsl._
import scala.util._
import scala.concurrent.duration._
import scala.concurrent._
import akka.Done
import akka.stream._
import akka.stream.scaladsl._
import akka.stream.testkit.scaladsl._
import akka.testkit.{ AkkaSpec, TestProbe }
import akka.pattern
@ -67,10 +69,12 @@ class StreamTestKitDocSpec extends AkkaSpec {
val sourceUnderTest = Source.tick(0.seconds, 200.millis, Tick)
val probe = TestProbe()
val cancellable = sourceUnderTest.to(Sink.actorRef(probe.ref, "completed")).run()
val cancellable = sourceUnderTest
.to(Sink.actorRef(probe.ref, onCompleteMessage = "completed", onFailureMessage = _ => "failed"))
.run()
probe.expectMsg(1.second, Tick)
probe.expectNoMsg(100.millis)
probe.expectNoMessage(100.millis)
probe.expectMsg(3.seconds, Tick)
cancellable.cancel()
probe.expectMsg(3.seconds, "completed")
@ -81,12 +85,23 @@ class StreamTestKitDocSpec extends AkkaSpec {
//#source-actorref
val sinkUnderTest = Flow[Int].map(_.toString).toMat(Sink.fold("")(_ + _))(Keep.right)
val (ref, future) = Source.actorRef(8, OverflowStrategy.fail).toMat(sinkUnderTest)(Keep.both).run()
val (ref, future) = Source
.actorRef(
completionMatcher = {
case Done =>
CompletionStrategy.draining
},
// Never fail the stream because of a message:
failureMatcher = PartialFunction.empty,
bufferSize = 8,
overflowStrategy = OverflowStrategy.fail)
.toMat(sinkUnderTest)(Keep.both)
.run()
ref ! 1
ref ! 2
ref ! 3
ref ! akka.actor.Status.Success(CompletionStrategy.draining)
ref ! Done
val result = Await.result(future, 3.seconds)
assert(result == "123")
@ -116,9 +131,7 @@ class StreamTestKitDocSpec extends AkkaSpec {
val (probe, future) = TestSource.probe[Int].toMat(sinkUnderTest)(Keep.both).run()
probe.sendError(new Exception("boom"))
Await.ready(future, 3.seconds)
val Failure(exception) = future.value.get
assert(exception.getMessage == "boom")
assert(future.failed.futureValue.getMessage == "boom")
//#injecting-failure
}

View file

@ -18,13 +18,13 @@ class RecipeAdhocSource extends RecipeSpec {
//#adhoc-source
def adhocSource[T](source: Source[T, _], timeout: FiniteDuration, maxRetries: Int): Source[T, _] =
Source.lazily(
Source.lazySource(
() =>
source
.backpressureTimeout(timeout)
.recoverWithRetries(maxRetries, {
case t: TimeoutException =>
Source.lazily(() => source.backpressureTimeout(timeout)).mapMaterializedValue(_ => NotUsed)
Source.lazySource(() => source.backpressureTimeout(timeout)).mapMaterializedValue(_ => NotUsed)
}))
//#adhoc-source

View file

@ -4,7 +4,6 @@
package docs.stream.operators
import akka.Done
import akka.actor.ActorSystem
import akka.testkit.TestProbe
@ -12,7 +11,7 @@ object SourceOperators {
implicit val system: ActorSystem = ???
def fromFuture = {
def fromFuture(): Unit = {
//#sourceFromFuture
import akka.actor.ActorSystem
@ -35,7 +34,6 @@ object SourceOperators {
import akka.stream.OverflowStrategy
import akka.stream.CompletionStrategy
import akka.stream.scaladsl._
import scala.util.Failure
val source: Source[Any, ActorRef] = Source.actorRef(
completionMatcher = {

View file

@ -36,10 +36,10 @@ class StreamConvertersToJava extends AkkaSpec with Futures {
"demonstrate conversion from Java8 streams" in {
//#fromJavaStream
def factory(): IntStream = IntStream.rangeClosed(0, 9)
val source: Source[Int, NotUsed] = StreamConverters.fromJavaStream(factory).map(_.intValue())
val source: Source[Int, NotUsed] = StreamConverters.fromJavaStream(() => factory()).map(_.intValue())
val sink: Sink[Int, Future[immutable.Seq[Int]]] = Sink.seq[Int]
val futureInts: Future[immutable.Seq[Int]] = source.toMat(sink)(Keep.right).run
val futureInts: Future[immutable.Seq[Int]] = source.toMat(sink)(Keep.right).run()
//#fromJavaStream
whenReady(futureInts) { ints =>

View file

@ -16,9 +16,6 @@ import akka.stream.scaladsl.Source
import akka.stream.scaladsl.Tcp
import akka.stream.testkit.TestPublisher
import akka.stream.testkit.TestSubscriber
import akka.stream.testkit.Utils.TE
import akka.stream.testkit.scaladsl.TestSource
import akka.stream.testkit.scaladsl.TestSink
import akka.util.ByteString
import scala.concurrent.duration._
@ -63,7 +60,7 @@ object FromSinkAndSource {
def testing(): Unit = {
def myApiThatTakesAFlow[In, Out](flow: Flow[In, Out, NotUsed]): Unit = ???
// #testing
val inProbe = TestSubscriber.probe[String]
val inProbe = TestSubscriber.probe[String]()
val outProbe = TestPublisher.probe[String]()
val testFlow = Flow.fromSinkAndSource(Sink.fromSubscriber(inProbe), Source.fromPublisher(outProbe))

View file

@ -52,7 +52,7 @@ object Restart extends App {
}
def onRestartWithBackoffInnerComplete() {
def onRestartWithBackoffInnerComplete() = {
//#restart-failure-inner-complete
val finiteSource = Source.tick(1.second, 1.second, "tick").take(3)

View file

@ -27,7 +27,7 @@ object Tick {
case class Response(text: String)
}
def simple() {
def simple() = {
// #simple
Source
.tick(
@ -39,7 +39,7 @@ object Tick {
// #simple
}
def pollSomething() {
def pollSomething() = {
// #poll-actor
val periodicActorResponse: Source[String, Cancellable] = Source
.tick(1.second, 1.second, "tick")

View file

@ -4,7 +4,6 @@
package docs.stream.operators.source
import akka.NotUsed
import akka.actor.typed.ActorSystem
import akka.stream.scaladsl.Source
@ -48,7 +47,7 @@ object Zip {
// #zipWithN-simple
}
def zipAll() {
def zipAll() = {
// #zipAll-simple
val numbers = Source(1 :: 2 :: 3 :: 4 :: Nil)
val letters = Source("a" :: "b" :: "c" :: Nil)

View file

@ -21,7 +21,7 @@ import org.scalatest.BeforeAndAfterAll
*/
//#test-example
class Parent extends Actor {
val child = context.actorOf(Props[Child], "child")
val child = context.actorOf(Props[Child](), "child")
var ponged = false
def receive = {
@ -71,7 +71,7 @@ class GenericDependentParent(childMaker: ActorRefFactory => ActorRef) extends Ac
*/
class MockedChild extends Actor {
def receive = {
case "ping" => sender ! "pong"
case "ping" => sender() ! "pong"
}
}
@ -139,7 +139,7 @@ class ParentChildSpec extends AnyWordSpec with Matchers with TestKitBase with Be
val parent = system.actorOf(Props(new Actor {
val child = context.actorOf(Props(new Child), "child")
def receive = {
case x if sender == child => proxy.ref.forward(x)
case x if sender() == child => proxy.ref.forward(x)
case x => child.forward(x)
}
}))

View file

@ -20,7 +20,7 @@ class MySpec()
with BeforeAndAfterAll {
//#implicit-sender
override def afterAll: Unit = {
override def afterAll(): Unit = {
TestKit.shutdownActorSystem(system)
}

View file

@ -45,7 +45,7 @@ class TestKitUsageSpec
val seqRef =
system.actorOf(Props(classOf[SequencingActor], testActor, headList, tailList))
override def afterAll: Unit = {
override def afterAll(): Unit = {
shutdown()
}
@ -72,7 +72,7 @@ class TestKitUsageSpec
filterRef ! "test"
expectMsg("test")
filterRef ! 1
expectNoMsg
expectNoMessage()
filterRef ! "some"
filterRef ! "more"
filterRef ! 1
@ -98,8 +98,8 @@ class TestKitUsageSpec
ignoreMsg {
case msg: String => msg == "1"
}
expectNoMsg
ignoreNoMsg
expectNoMessage()
ignoreNoMsg()
}
}
}

View file

@ -170,8 +170,7 @@ class TestKitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
val actorRef = TestActorRef(new MyActor)
// hypothetical message stimulating a '42' answer
val future = actorRef ? Say42
val Success(result: Int) = future.value.get
result should be(42)
future.futureValue should be(42)
//#test-behavior
}
@ -204,11 +203,11 @@ class TestKitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
import akka.actor.Props
import scala.concurrent.duration._
val worker = system.actorOf(Props[Worker])
val worker = system.actorOf(Props[Worker]())
within(200 millis) {
worker ! "some work"
expectMsg("some result")
expectNoMessage // will block for the rest of the 200ms
expectNoMessage() // will block for the rest of the 200ms
Thread.sleep(300) // will NOT make this block fail
}
//#test-within
@ -226,7 +225,7 @@ class TestKitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
//#test-probe
val probe1 = TestProbe()
val probe2 = TestProbe()
val actor = system.actorOf(Props[MyDoubleEcho])
val actor = system.actorOf(Props[MyDoubleEcho]())
actor ! ((probe1.ref, probe2.ref))
actor ! "hello"
probe1.expectMsg(500 millis, "hello")
@ -287,7 +286,7 @@ class TestKitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
//#test-probe-forward
val probe = TestProbe()
val source = system.actorOf(Props(classOf[Source], probe.ref))
val dest = system.actorOf(Props[Destination])
val dest = system.actorOf(Props[Destination]())
source ! "start"
probe.expectMsg("work")
probe.forward(dest)
@ -313,7 +312,7 @@ class TestKitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
"demonstrate calling thread dispatcher" in {
//#calling-thread-dispatcher
import akka.testkit.CallingThreadDispatcher
val ref = system.actorOf(Props[MyActor].withDispatcher(CallingThreadDispatcher.Id))
val ref = system.actorOf(Props[MyActor]().withDispatcher(CallingThreadDispatcher.Id))
//#calling-thread-dispatcher
}

View file

@ -233,6 +233,7 @@ lazy val docs = akkaModule("akka-docs")
streamTestkit % "compile->compile;test->test",
persistenceTestkit % "compile->compile;test->test")
.settings(Dependencies.docs)
.settings(AkkaDisciplinePlugin.docs)
.settings(Paradox.settings)
.settings(javacOptions += "-parameters") // for Jackson
.enablePlugins(

View file

@ -18,7 +18,6 @@ object AkkaDisciplinePlugin extends AutoPlugin {
val enabled = !sys.props.contains("akka.no.discipline")
// We allow warnings in docs to get the 'snippets' right
val nonFatalWarningsFor = Set("akka-docs")
val nonFatalJavaWarningsFor = Set(
// for sun.misc.Unsafe and AbstractScheduler
"akka-actor",
@ -51,6 +50,7 @@ object AkkaDisciplinePlugin extends AutoPlugin {
"akka-cluster-sharding",
"akka-cluster-sharding-typed",
"akka-distributed-data",
"akka-docs",
"akka-persistence",
"akka-persistence-tck",
"akka-persistence-typed",
@ -74,10 +74,7 @@ object AkkaDisciplinePlugin extends AutoPlugin {
lazy val disciplineSettings =
if (enabled) {
silencerSettings ++ Seq(
Compile / scalacOptions ++= (
if (!nonFatalWarningsFor(name.value)) Seq("-Xfatal-warnings")
else Seq.empty
),
Compile / scalacOptions ++= Seq("-Xfatal-warnings"),
Test / scalacOptions --= testUndicipline,
Compile / javacOptions ++= (
if (!nonFatalJavaWarningsFor(name.value)) Seq("-Werror", "-Xlint:deprecation", "-Xlint:unchecked")
@ -136,4 +133,23 @@ object AkkaDisciplinePlugin extends AutoPlugin {
"-Ypartial-unification",
"-Ywarn-extra-implicit")
/**
* We are a little less strict in docs
*/
val docs = Seq(
scalacOptions ++= Seq(
// In docs, 'unused' variables can be useful for naming and showing the type
"-P:silencer:globalFilters=is never used",
// Import statements are often duplicated across multiple snippets in one file
"-P:silencer:globalFilters=Unused import",
// We keep documentation for this old API around for a while:
"-P:silencer:globalFilters=in object Dns is deprecated",
"-P:silencer:globalFilters=in class Dns is deprecated",
// Because we sometimes wrap things in a class:
"-P:silencer:globalFilters=The outer reference in this type test cannot be checked at run time",
// Because we show some things that are deprecated in
// 2.13 but don't have a replacement that was in 2.12:
"-P:silencer:globalFilters=deprecated \\(since 2.13.0\\)"
)
)
}