diff --git a/balancer/weightedroundrobin/balancer.go b/balancer/weightedroundrobin/balancer.go index e835b1c21914..1c515b6de719 100644 --- a/balancer/weightedroundrobin/balancer.go +++ b/balancer/weightedroundrobin/balancer.go @@ -154,7 +154,12 @@ func (b *wrrBalancer) updateAddresses(addrs []resolver.Address) { wsc = wsci.(*weightedSubConn) } else { // addr is a new address (not existing in b.subConns). - sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{}) + var sc balancer.SubConn + sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{ + StateListener: func(state balancer.SubConnState) { + b.updateSubConnState(sc, state) + }, + }) if err != nil { b.logger.Warningf("Failed to create new SubConn for address %v: %v", addr, err) continue @@ -205,6 +210,10 @@ func (b *wrrBalancer) ResolverError(err error) { } func (b *wrrBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { + b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", sc, state) +} + +func (b *wrrBalancer) updateSubConnState(sc balancer.SubConn, state balancer.SubConnState) { wsc := b.scMap[sc] if wsc == nil { b.logger.Errorf("UpdateSubConnState called with an unknown SubConn: %p, %v", sc, state)