Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xds/clusterresolver: set ClusterName for DNS child #5119

Merged
merged 2 commits into from Jan 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions xds/internal/balancer/cdsbalancer/cdsbalancer.go
Expand Up @@ -328,6 +328,7 @@ func (b *cdsBalancer) handleWatchUpdate(update clusterHandlerUpdate) {
case xdsresource.ClusterTypeLogicalDNS:
dms[i] = clusterresolver.DiscoveryMechanism{
Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS,
Cluster: cu.ClusterName,
DNSHostname: cu.DNSHostName,
}
default:
Expand Down
Expand Up @@ -43,6 +43,7 @@ const (
defaultTestShortTimeout = 10 * time.Millisecond
testEDSServcie = "test-eds-service-name"
testClusterName = "test-cluster-name"
testClusterName2 = "google_cfe_some-name"
)

var (
Expand Down
9 changes: 6 additions & 3 deletions xds/internal/balancer/clusterresolver/configbuilder.go
Expand Up @@ -135,7 +135,7 @@ func buildPriorityConfig(priorities []priorityConfig, xdsLBPolicy *internalservi
}
retAddrs = append(retAddrs, addrs...)
case DiscoveryMechanismTypeLogicalDNS:
name, config, addrs := buildClusterImplConfigForDNS(i, p.addresses)
name, config, addrs := buildClusterImplConfigForDNS(i, p.addresses, p.mechanism)
retConfig.Priorities = append(retConfig.Priorities, name)
retConfig.Children[name] = &priority.Child{
Config: &internalserviceconfig.BalancerConfig{Name: clusterimpl.Name, Config: config},
Expand All @@ -149,15 +149,18 @@ func buildPriorityConfig(priorities []priorityConfig, xdsLBPolicy *internalservi
return retConfig, retAddrs, nil
}

func buildClusterImplConfigForDNS(parentPriority int, addrStrs []string) (string, *clusterimpl.LBConfig, []resolver.Address) {
func buildClusterImplConfigForDNS(parentPriority int, addrStrs []string, mechanism DiscoveryMechanism) (string, *clusterimpl.LBConfig, []resolver.Address) {
// Endpoint picking policy for DNS is hardcoded to pick_first.
const childPolicy = "pick_first"
retAddrs := make([]resolver.Address, 0, len(addrStrs))
pName := fmt.Sprintf("priority-%v", parentPriority)
for _, addrStr := range addrStrs {
retAddrs = append(retAddrs, hierarchy.Set(resolver.Address{Addr: addrStr}, []string{pName}))
}
return pName, &clusterimpl.LBConfig{ChildPolicy: &internalserviceconfig.BalancerConfig{Name: childPolicy}}, retAddrs
return pName, &clusterimpl.LBConfig{
Cluster: mechanism.Cluster,
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: childPolicy},
}, retAddrs
}

// buildClusterImplConfigForEDS returns a list of cluster_impl configs, one for
Expand Down
7 changes: 5 additions & 2 deletions xds/internal/balancer/clusterresolver/configbuilder_test.go
Expand Up @@ -199,7 +199,8 @@ func TestBuildPriorityConfig(t *testing.T) {
},
{
mechanism: DiscoveryMechanism{
Type: DiscoveryMechanismTypeLogicalDNS,
Cluster: testClusterName2,
Type: DiscoveryMechanismTypeLogicalDNS,
},
addresses: testAddressStrs[4],
},
Expand Down Expand Up @@ -277,6 +278,7 @@ func TestBuildPriorityConfig(t *testing.T) {
Config: &internalserviceconfig.BalancerConfig{
Name: clusterimpl.Name,
Config: &clusterimpl.LBConfig{
Cluster: testClusterName2,
ChildPolicy: &internalserviceconfig.BalancerConfig{Name: "pick_first"},
},
},
Expand Down Expand Up @@ -307,9 +309,10 @@ func TestBuildPriorityConfig(t *testing.T) {
}

func TestBuildClusterImplConfigForDNS(t *testing.T) {
gotName, gotConfig, gotAddrs := buildClusterImplConfigForDNS(3, testAddressStrs[0])
gotName, gotConfig, gotAddrs := buildClusterImplConfigForDNS(3, testAddressStrs[0], DiscoveryMechanism{Cluster: testClusterName2, Type: DiscoveryMechanismTypeLogicalDNS})
wantName := "priority-3"
wantConfig := &clusterimpl.LBConfig{
Cluster: testClusterName2,
ChildPolicy: &internalserviceconfig.BalancerConfig{
Name: "pick_first",
},
Expand Down