diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala index fe4b5048af..fe8abcab5b 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala @@ -414,13 +414,16 @@ private[cluster] class ClusterCoreDaemon(publisher: ActorRef, joinConfigCompatCh joinSeedNodes(newSeedNodes) case msg: SubscriptionMessage ⇒ publisher forward msg + case Welcome(from, gossip) ⇒ + welcome(from.address, from, gossip) case _: Tick ⇒ if (joinSeedNodesDeadline.exists(_.isOverdue)) joinSeedNodesWasUnsuccessful() }: Actor.Receive).orElse(receiveExitingCompleted) def tryingToJoin(joinWith: Address, deadline: Option[Deadline]): Actor.Receive = ({ - case Welcome(from, gossip) ⇒ welcome(joinWith, from, gossip) + case Welcome(from, gossip) ⇒ + welcome(joinWith, from, gossip) case InitJoin ⇒ logInfo("Received InitJoin message from [{}], but this node is not a member yet", sender()) sender() ! InitJoinNack(selfAddress) @@ -499,10 +502,10 @@ private[cluster] class ClusterCoreDaemon(publisher: ActorRef, joinConfigCompatCh case QuarantinedEvent(address, uid) ⇒ quarantined(UniqueAddress(address, uid)) case ClusterUserAction.JoinTo(address) ⇒ logInfo("Trying to join [{}] when already part of a cluster, ignoring", address) - case JoinSeedNodes(seedNodes) ⇒ + case JoinSeedNodes(nodes) ⇒ logInfo( "Trying to join seed nodes [{}] when already part of a cluster, ignoring", - seedNodes.mkString(", ")) + nodes.mkString(", ")) case ExitingConfirmed(address) ⇒ receiveExitingConfirmed(address) }: Actor.Receive).orElse(receiveExitingCompleted) @@ -560,6 +563,7 @@ private[cluster] class ClusterCoreDaemon(publisher: ActorRef, joinConfigCompatCh def joinSeedNodes(newSeedNodes: immutable.IndexedSeq[Address]): Unit = { if (newSeedNodes.nonEmpty) { stopSeedNodeProcess() + seedNodes = newSeedNodes // keep them for retry seedNodeProcess = if (newSeedNodes == immutable.IndexedSeq(selfAddress)) { @@ -692,7 +696,7 @@ private[cluster] class ClusterCoreDaemon(publisher: ActorRef, joinConfigCompatCh } /** - * Reply from Join request. + * Accept reply from Join request. */ def welcome(joinWith: Address, from: UniqueAddress, gossip: Gossip): Unit = { require(latestGossip.members.isEmpty, "Join can only be done from empty state")