in grpcgcp/gcp_balancer.go [273:301]
func (gb *gcpBalancer) UpdateClientConnState(ccs balancer.ClientConnState) error {
gb.mu.Lock()
defer gb.mu.Unlock()
addrs := ccs.ResolverState.Addresses
if gb.log.V(FINE) {
gb.log.Infoln("got new resolved addresses: ", addrs, " and balancer config: ", ccs.BalancerConfig)
}
gb.addrs = addrs
if gb.cfg == nil {
cfg, ok := ccs.BalancerConfig.(*GCPBalancerConfig)
if !ok && ccs.BalancerConfig != nil {
return fmt.Errorf("provided config is not GCPBalancerConfig: %v", ccs.BalancerConfig)
}
gb.initializeConfig(cfg)
}
if len(gb.scRefs) == 0 {
gb.newSubConn()
return nil
}
for _, scRef := range gb.scRefs {
// TODO(weiranf): update streams count when new addrs resolved?
scRef.subConn.UpdateAddresses(addrs)
scRef.subConn.Connect()
}
return nil
}