in src/go/configgenerator/routegen/util.go [72:112]
func determineBackendClusterForSelector(selector string, backendRuleBySelector map[string]*servicepb.BackendRule, serviceConfig *servicepb.Service, opts options.ConfigGeneratorOptions) (*BackendClusterSpecifier, error) {
localCluster := &BackendClusterSpecifier{
Name: clustergen.MakeLocalBackendClusterName(serviceConfig),
}
if opts.EnableBackendAddressOverride {
return localCluster, nil
}
backendRule, ok := backendRuleBySelector[selector]
if !ok {
return localCluster, nil
}
// Check for HTTP backend.
httpBackendRule := clustergen.IsHTTPBackendEnabled(backendRule)
if httpBackendRule != nil && !util.ShouldSkipOPDiscoveryAPI(selector, opts.AllowDiscoveryAPIs) {
if httpBackendRule.GetAddress() == "" {
return nil, fmt.Errorf("HTTP backend rule for selector %q has empty address", selector)
}
httpBackend, err := makeBackendClusterSpecifierFromRule(httpBackendRule)
if err != nil {
return nil, fmt.Errorf("fail while processing HTTP backend rule for selector %q: %v", selector, err)
}
localCluster.HTTPBackend = httpBackend
}
if backendRule.GetAddress() == "" {
return localCluster, nil
}
normalBackend, err := makeBackendClusterSpecifierFromRule(backendRule)
if err != nil {
return nil, fmt.Errorf("fail while processing normal (non-HTTP) backend rule for selector %q: %v", selector, err)
}
normalBackend.HTTPBackend = localCluster.HTTPBackend
return normalBackend, nil
}