func()

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
}