Merge pull request #1623 from drewhk/wip-3519-clusterrouter-supervisor-fix-drewhk
=clu #3519 Cluster router should use provided supervisor strategy
This commit is contained in:
commit
fcacbbbddf
2 changed files with 54 additions and 2 deletions
|
|
@ -52,7 +52,7 @@ final case class ClusterRouterConfig(local: RouterConfig, settings: ClusterRoute
|
|||
}: Route) orElse localRoute
|
||||
}
|
||||
|
||||
override def createActor(): Router = new ClusterRouterActor
|
||||
override def createActor(): Router = new ClusterRouterActor(local.supervisorStrategy)
|
||||
|
||||
override def supervisorStrategy: SupervisorStrategy = local.supervisorStrategy
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ private[akka] class ClusterRouteeProvider(
|
|||
* INTERNAL API
|
||||
* The router actor, subscribes to cluster events.
|
||||
*/
|
||||
private[akka] class ClusterRouterActor extends Router {
|
||||
private[akka] class ClusterRouterActor(override val supervisorStrategy: SupervisorStrategy) extends Router {
|
||||
|
||||
// re-subscribe when restart
|
||||
override def preStart(): Unit = {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
package akka.cluster.routing
|
||||
|
||||
import akka.testkit._
|
||||
import akka.actor._
|
||||
import akka.routing.RoundRobinRouter
|
||||
import akka.cluster.routing.ClusterRouterConfig
|
||||
import akka.actor.OneForOneStrategy
|
||||
|
||||
object ClusterRouterSupervisorSpec {
|
||||
|
||||
class KillableActor(testActor: ActorRef) extends Actor {
|
||||
|
||||
def receive = {
|
||||
case "go away" ⇒
|
||||
throw new IllegalArgumentException("Goodbye then!")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ClusterRouterSupervisorSpec extends AkkaSpec("""
|
||||
akka.actor.provider = "akka.cluster.ClusterActorRefProvider"
|
||||
akka.remote.netty.tcp.port = 0
|
||||
""") {
|
||||
|
||||
import ClusterRouterSupervisorSpec._
|
||||
|
||||
"Cluster aware routers" must {
|
||||
|
||||
"use provided supervisor strategy" in {
|
||||
val router = system.actorOf(Props(classOf[KillableActor], testActor).withRouter(
|
||||
ClusterRouterConfig(RoundRobinRouter(supervisorStrategy = OneForOneStrategy() {
|
||||
case _ ⇒
|
||||
testActor ! "supervised"
|
||||
SupervisorStrategy.Stop
|
||||
}), ClusterRouterSettings(
|
||||
totalInstances = 1,
|
||||
maxInstancesPerNode = 1,
|
||||
allowLocalRoutees = true,
|
||||
useRole = None))), name = "therouter")
|
||||
|
||||
router ! "go away"
|
||||
expectMsg("supervised")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue