in grpcgcp/multiendpoint/multiendpoint.go [146:173]
func (me *multiEndpoint) SetEndpoints(endpoints []string) error {
me.Lock()
defer me.Unlock()
if len(endpoints) == 0 {
return errors.New("endpoints list cannot be empty")
}
newEndpoints := make(map[string]struct{})
for _, v := range endpoints {
newEndpoints[v] = struct{}{}
}
// Remove obsolete endpoints.
for e := range me.endpoints {
if _, ok := newEndpoints[e]; !ok {
delete(me.endpoints, e)
}
}
// Add new endpoints and update priority.
for i, e := range endpoints {
if _, ok := me.endpoints[e]; !ok {
me.endpoints[e] = me.newEndpoint(e, i)
} else {
me.endpoints[e].priority = i
}
}
me.maybeUpdateCurrent()
return nil
}