in management-cluster-bootstrap/src/main/scala/org/apache/pekko/management/cluster/bootstrap/contactpoint/HttpClusterBootstrapRoutes.scala [37:63]
def memberToClusterMember(m: Member): ClusterMember =
ClusterMember(m.uniqueAddress.address, m.uniqueAddress.longUid, m.status.toString, m.roles)
val state = cluster.state
// TODO shuffle the members so in a big deployment nodes start joining different ones and not all the same?
val members = state.members
.diff(state.unreachable)
.filter(m =>
m.status == MemberStatus.up || m.status == MemberStatus.weaklyUp || m.status == MemberStatus.joining)
.take(settings.contactPoint.httpMaxSeedNodesToExpose)
.map(memberToClusterMember)
val info = SeedNodes(cluster.selfMember.uniqueAddress.address, members)
log.info(
"Bootstrap request from {}: Contact Point returning {} seed-nodes [{}]",
clientIp,
members.size,
members.map(_.node).mkString(", "))
complete(info)
}
}
/** Scala API */
val routes: Route =
(path("bootstrap" / "seed-nodes") & get) {
toStrictEntity(1.second) { // always drain everything