in grpcgcp/gcp_balancer.go [65:87]
func (bb *gcpBalancerBuilder) Build(
cc balancer.ClientConn,
opt balancer.BuildOptions,
) balancer.Balancer {
gb := &gcpBalancer{
cc: cc,
methodCfg: make(map[string]*pb.AffinityConfig),
affinityMap: make(map[string]balancer.SubConn),
fallbackMap: make(map[string]balancer.SubConn),
scRefs: make(map[balancer.SubConn]*subConnRef),
scStates: make(map[balancer.SubConn]connectivity.State),
refreshingScRefs: make(map[balancer.SubConn]*subConnRef),
scRefList: []*subConnRef{},
rrRefId: ^uint32(0),
csEvltr: &connectivityStateEvaluator{},
// Initialize picker to a picker that always return
// ErrNoSubConnAvailable, because when state of a SubConn changes, we
// may call UpdateBalancerState with this picker.
picker: newErrPicker(balancer.ErrNoSubConnAvailable),
}
gb.log = NewGCPLogger(compLogger, fmt.Sprintf("[gcpBalancer %p]", gb))
return gb
}