func()

in src/go/configgenerator/clustergen/helpers/backend.go [53:109]


func (c *BaseBackendCluster) GenBaseConfig() (*clusterpb.Cluster, error) {
	config := &clusterpb.Cluster{
		Name:                 c.ClusterName,
		LbPolicy:             clusterpb.Cluster_ROUND_ROBIN,
		ConnectTimeout:       durationpb.New(c.ClusterConnectTimeout),
		ClusterDiscoveryType: &clusterpb.Cluster_Type{Type: clusterpb.Cluster_LOGICAL_DNS},
		LoadAssignment:       util.CreateLoadAssignment(c.Hostname, c.Port),
	}

	if c.MaxRequestsThreshold > 0 {
		config.CircuitBreakers = &clusterpb.CircuitBreakers{
			Thresholds: []*clusterpb.CircuitBreakers_Thresholds{
				makeCircuitBreakersThresholds(corepb.RoutingPriority_DEFAULT, c.MaxRequestsThreshold),
				makeCircuitBreakersThresholds(corepb.RoutingPriority_HIGH, c.MaxRequestsThreshold),
			},
		}
	}

	isHttp2 := c.Protocol == util.GRPC || c.Protocol == util.HTTP2

	if c.TLS != nil {
		var alpnProtocols []string
		if isHttp2 {
			alpnProtocols = []string{"h2"}
		}
		transportSocket, err := c.TLS.MakeTLSConfig(c.Hostname, alpnProtocols)
		if err != nil {
			return nil, err
		}
		config.TransportSocket = transportSocket
	}

	if isHttp2 {
		config.TypedExtensionProtocolOptions = util.CreateUpstreamProtocolOptions()
	}

	switch c.BackendDnsLookupFamily {
	case "auto":
		config.DnsLookupFamily = clusterpb.Cluster_AUTO
	case "v4only":
		config.DnsLookupFamily = clusterpb.Cluster_V4_ONLY
	case "v6only":
		config.DnsLookupFamily = clusterpb.Cluster_V6_ONLY
	case "v4preferred":
		config.DnsLookupFamily = clusterpb.Cluster_V4_PREFERRED
	case "all":
		config.DnsLookupFamily = clusterpb.Cluster_ALL
	default:
		return nil, fmt.Errorf("invalid DnsLookupFamily: %s; Only auto, v4only, v6only, v4preferred, and all are valid", c.BackendDnsLookupFamily)
	}

	if err := MaybeAddDNSResolver(c.DNS, config); err != nil {
		return nil, err
	}

	return config, nil
}