func (c *cacheSelector) Select(service string, opts ...selector.SelectOption) (selector.Next, error) { sopts := selector.SelectOptions{ Strategy: c.so.Strategy, } for _, opt := range opts { opt(&sopts) } // get the service // try the cache first // if that fails go directly to the registry services, err := c.get(service) if err != nil { return nil, err } // apply the filters for _, filter := range sopts.Filters { services = filter(services) } // if there's nothing left, return if len(services) == 0 { return nil, selector.ErrNoneAvailable } return sopts.Strategy(services), nil }
func (r *blacklistSelector) Select(service string, opts ...selector.SelectOption) (selector.Next, error) { sopts := selector.SelectOptions{ Strategy: r.so.Strategy, } for _, opt := range opts { opt(&sopts) } // get the service services, err := r.so.Registry.GetService(service) if err != nil { return nil, err } // apply the filters for _, filter := range sopts.Filters { services = filter(services) } // apply the blacklist services, err = r.bl.Filter(services) if err != nil { return nil, err } // if there's nothing left, return if len(services) == 0 { return nil, selector.ErrNoneAvailable } return sopts.Strategy(services), nil }