I would guess you are looking for MemberRemoved. That should cover both the graceful leaving case and unexpected crash followed by downing case.
/Patrik ons 31 maj 2017 kl. 12:01 skrev David <[email protected]>: > Apparently I can subscribe to akka.cluster.ClusterEvent.MemberLeft, which > provides the information I need: MemberLeft(Member(address = akka.tcp:// > [email protected]:2552, status = Leaving)) > Is this the correct approach? > > > On Wednesday, May 31, 2017 at 10:43:50 AM UTC+2, David wrote: >> >> Hello, >> >> To what cluster event should a member subscribe to be notified when it >> loses the connection to the cluster leader? >> >> Suppose I am in an edge case with only 2 members: >> - One is the leader (declared in the configuration as a seed node) >> - The other is a simple member (not a seed node). >> >> I would like the actors running on the simple members to perform an >> action when they detect that they have lost the connection with the rest of >> the cluster. >> >> When I stop the leader node(akka.tcp://[email protected]:2552), I >> get the following logs in the surviving member (akka.tcp:// >> [email protected]:2552): >> >> [warn] a.c.ClusterCoreDaemon - Cluster Node [akka.tcp:// >> [email protected]:2552] - Marking node(s) as UNREACHABLE >> [Member(address = akka.tcp://[email protected]:2552, status = >> Leaving)]. Node roles [toiler] >> [warn] a.r.t.n.NettyTransport - Remote connection to null failed with >> java.net.ConnectException: Connection refused: /10.1.62.1:2552 >> [warn] a.r.ReliableDeliverySupervisor - Association with remote system >> [akka.tcp://[email protected]:2552] has failed, address is now >> gated for [5000] ms. Reason: [Association failed with [akka.tcp:// >> [email protected]:2552]] Caused by: [Connection refused: / >> 10.1.62.1:2552] >> [warn] a.r.t.n.NettyTransport - Remote connection to null failed with >> java.net.ConnectException: Connection refused: /10.1.62.1:2552 >> [warn] a.r.ReliableDeliverySupervisor - Association with remote system >> [akka.tcp://[email protected]:2552] has failed, address is now >> gated for [5000] ms. Reason: [Association failed with [akka.tcp:// >> [email protected]:2552]] Caused by: [Connection refused: / >> 10.1.62.1:2552] >> [warn] a.r.t.n.NettyTransport - Remote connection to null failed with >> java.net.ConnectException: Connection refused: /10.1.62.1:2552 >> [warn] a.r.ReliableDeliverySupervisor - Association with remote system >> [akka.tcp://[email protected]:2552] has failed, address is now >> gated for [5000] ms. Reason: [Association failed with [akka.tcp:// >> [email protected]:2552]] Caused by: [Connection refused: / >> 10.1.62.1:2552] >> [warn] a.r.t.n.NettyTransport - Remote connection to null failed with >> java.net.ConnectException: Connection refused: /10.1.62.1:2552 >> [warn] a.r.ReliableDeliverySupervisor - Association with remote system >> [akka.tcp://[email protected]:2552] has failed, address is now >> gated for [5000] ms. Reason: [Association failed with [akka.tcp:// >> [email protected]:2552]] Caused by: [Connection refused: / >> 10.1.62.1:2552] >> [info] a.c.Cluster(akka://ClusterSystem) - Cluster Node [akka.tcp:// >> [email protected]:2552] - Leader can currently not perform its >> duties, reachability status: [akka.tcp://[email protected]:2552 -> >> akka.tcp://[email protected]:2552: Unreachable [Unreachable] (1)], >> member status: [akka.tcp://[email protected]:2552 Leaving >> seen=false, akka.tcp://[email protected]:2552 Up seen=true] >> >> As shown in the code below, I have tried to subscribe to the following >> events: UnreachableMember, LeaderChanged, and DisassociatedEvent without >> success they don't seem to be triggered when there is no more leader in the >> cluster. >> >> import akka.actor._ >> >> import akka.cluster.Cluster >> >> import akka.cluster.ClusterEvent.LeaderChanged >> >> import akka.cluster.ClusterEvent._ >> >> import akka.remote.DisassociatedEvent >> >> import play.api.Logger >> >> >> >> trait Message >> >> case class Ping( i: Int ) extends Message >> >> case object Pong extends Message >> >> case object Start extends Message >> >> >> class ToilerActor extends Actor with ActorLogging >> >> { >> >> val cluster = Cluster( context.system ) >> >> >> >> override def preStart(): Unit = >> >> { >> >> Logger.info( "########################### Toiler prestarted >> ###########################" ) >> >> cluster.subscribe(self, initialStateMode = InitialStateAsEvents, >> classOf[UnreachableMember], classOf[LeaderChanged]) >> >> context.system.eventStream.subscribe(self, classOf >> [DisassociatedEvent]) >> >> self ! Start >> >> } >> >> >> >> override def postStop(): Unit = cluster.unsubscribe(self) >> >> >> >> def receive = >> >> { >> >> case Start => Logger.info( s"Actor started: ${self.path.toString} >> " ) >> >> >> >> case ping: Ping => { >> >> Logger.info( s"Toiler ${self.path.toString} received ping ${ >> ping.i} message from ${sender.path.toString}" ) >> >> sender ! Pong >> >> } >> >> >> >> case leader: LeaderChanged => { >> >> Logger.info( s"======================> Leader change >> detected: ${leader}" ) >> >> } >> >> >> >> case UnreachableMember( member ) => { >> >> Logger.info( s"======================> remote member >> detected as unreachable: ${member}" ) >> >> } >> >> >> >> case event: DisassociatedEvent => { >> >> Logger.info( s"======================> remote host detected >> as disassociated: ${event.remoteAddress}" ) >> >> } >> >> >> >> case x => Logger.info( s"Unknown message received: ${x.toString}" >> ) >> >> } >> >> >> } >> >> >> What am I missing? How can I subscribe or catch to the "Marking node(s) >> as UNREACHABLE [Member(address = akka.tcp://[email protected]:2552, >> status = Leaving)]" >> >> >> Many thanks, >> >> >> David >> > -- > >>>>>>>>>> Read the docs: http://akka.io/docs/ > >>>>>>>>>> Check the FAQ: > http://doc.akka.io/docs/akka/current/additional/faq.html > >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user > --- > You received this message because you are subscribed to the Google Groups > "Akka User List" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/akka-user. > For more options, visit https://groups.google.com/d/optout. > -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.
