Skip to content

Commit

Permalink
xds/clusterresolver: set ClusterName for DNS child (#5119)
Browse files Browse the repository at this point in the history
  • Loading branch information
menghanl committed Jan 12, 2022
1 parent 9353ae3 commit b49c0c9
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 5 deletions.
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

0 comments on commit b49c0c9

Please sign in to comment.