Merge pull request #1313 from akka/wip-2797-cluster-router-stop-routees-patriknw
ClusterRouterConfig should stop remote deployed routees, see #2797
This commit is contained in:
commit
9270bfa70b
2 changed files with 15 additions and 4 deletions
|
|
@ -199,6 +199,14 @@ private[akka] class ClusterRouteeProvider(
|
|||
|
||||
private[routing] def createRoutees(): Unit = createRoutees(settings.totalInstances)
|
||||
|
||||
override def unregisterRoutees(routees: immutable.Iterable[ActorRef]): Unit = {
|
||||
super.unregisterRoutees(routees)
|
||||
if (!settings.isRouteesPathDefined) {
|
||||
// stop remote deployed routees
|
||||
routees foreach context.stop
|
||||
}
|
||||
}
|
||||
|
||||
private def selectDeploymentTarget: Option[Address] = {
|
||||
val currentRoutees = routees
|
||||
val currentNodes = availableNodes
|
||||
|
|
@ -286,8 +294,8 @@ private[akka] class ClusterRouterActor extends Router {
|
|||
routeeProvider.nodes -= address
|
||||
|
||||
// unregister routees that live on that node
|
||||
val affectedRoutes = routeeProvider.routees.filter(fullAddress(_) == address)
|
||||
routeeProvider.unregisterRoutees(affectedRoutes)
|
||||
val affectedRoutees = routeeProvider.routees.filter(fullAddress(_) == address)
|
||||
routeeProvider.unregisterRoutees(affectedRoutees)
|
||||
|
||||
// createRoutees will not create more than createRoutees and maxInstancesPerNode
|
||||
// this is useful when totalInstances < upNodes.size
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@ import language.postfixOps
|
|||
import scala.concurrent.Await
|
||||
import scala.concurrent.duration._
|
||||
import com.typesafe.config.ConfigFactory
|
||||
|
||||
import akka.actor.Actor
|
||||
import akka.actor.ActorRef
|
||||
import akka.actor.Address
|
||||
import akka.actor.Props
|
||||
import akka.actor.Terminated
|
||||
import akka.cluster.MultiNodeClusterSpec
|
||||
import akka.pattern.ask
|
||||
import akka.remote.testkit.MultiNodeConfig
|
||||
|
|
@ -307,10 +307,13 @@ abstract class ClusterRoundRobinRoutedActorSpec extends MultiNodeSpec(ClusterRou
|
|||
def routees = currentRoutees(router2)
|
||||
def routeeAddresses = (routees map fullAddress).toSet
|
||||
|
||||
routees foreach watch
|
||||
val notUsedAddress = ((roles map address).toSet -- routeeAddresses).head
|
||||
|
||||
val downAddress = routeeAddresses.find(_ != address(first)).get
|
||||
val downRoutee = routees.find(_.path.address == downAddress).get
|
||||
|
||||
cluster.down(downAddress)
|
||||
expectMsgType[Terminated].actor must be(downRoutee)
|
||||
awaitAssert {
|
||||
routeeAddresses must contain(notUsedAddress)
|
||||
routeeAddresses must not contain (downAddress)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue