diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterRemoteWatcher.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterRemoteWatcher.scala index 418924842d..6047d99cd7 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterRemoteWatcher.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterRemoteWatcher.scala @@ -82,6 +82,7 @@ private[cluster] class ClusterRemoteWatcher( takeOverResponsibility(m.address) case MemberRemoved(m) ⇒ clusterNodes -= m.address + quarantine(m.address, m.uniqueAddress.uid) publishAddressTerminated(m.address) } diff --git a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala index 2be4989770..446f2b39df 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala @@ -184,15 +184,17 @@ private[akka] class RemoteWatcher( watchingNodes foreach { a ⇒ if (!unreachable(a) && !failureDetector.isAvailable(a)) { log.warning("Detected unreachable: [{}]", a) + addressUids.get(a) foreach { uid ⇒ quarantine(a, uid) } publishAddressTerminated(a) unreachable += a } } - def publishAddressTerminated(address: Address): Unit = { - addressUids.get(address) foreach { uid ⇒ remoteProvider.quarantine(address, uid) } + def publishAddressTerminated(address: Address): Unit = context.system.eventStream.publish(AddressTerminated(address)) - } + + def quarantine(address: Address, uid: Int): Unit = + remoteProvider.quarantine(address, uid) def watchRemote(watchee: ActorRef, watcher: ActorRef): Unit = if (watchee.path.uid == akka.actor.ActorCell.undefinedUid)