in management-cluster-bootstrap/src/main/scala/org/apache/pekko/management/cluster/bootstrap/internal/BootstrapCoordinator.scala [341:374]
private[internal] def ensureProbing(
selfContactPointScheme: String,
contactPoint: ResolvedTarget): Option[ActorRef] = {
val targetPort = contactPoint.port.getOrElse(settings.contactPoint.fallbackPort)
val rawBaseUri = Uri(selfContactPointScheme, Uri.Authority(Uri.Host(contactPoint.host), targetPort))
val baseUri = settings.managementBasePath.fold(rawBaseUri)(prefix => rawBaseUri.withPath(Uri.Path(s"/$prefix")))
val childActorName = HttpContactPointBootstrap.name(baseUri.authority.host, baseUri.authority.port)
log.debug("Ensuring probing actor: " + childActorName)
// This should never really happen in well configured env, but it may happen that someone is confused with ports
// and we end up trying to probe (using http for example) a port that actually is our own remoting port.
// We actively bail out of this case and log a warning instead.
val wasAboutToProbeSelfAddress =
baseUri.authority.host.address() == cluster.selfAddress.host.getOrElse("---") &&
baseUri.authority.port == cluster.selfAddress.port.getOrElse(-1)
if (wasAboutToProbeSelfAddress) {
log.warning(
"Misconfiguration detected! Attempted to start probing a contact-point which address [{}] " +
"matches our local remoting address [{}]. Avoiding probing this address. Consider double checking your service " +
"discovery and port configurations.",
baseUri,
cluster.selfAddress)
None
} else
context.child(childActorName) match {
case Some(contactPointProbingChild) =>
Some(contactPointProbingChild)
case None =>
val props = HttpContactPointBootstrap.props(settings, contactPoint, baseUri)
Some(context.actorOf(props, childActorName))
}
}