NewMemcachedClient creates a new MemcacheClient that gets its server list from SRV and updates the server list on a regular basis.
(cfg MemcachedClientConfig, name string, r prometheus.Registerer, logger log.Logger)
| 94 | // NewMemcachedClient creates a new MemcacheClient that gets its server list |
| 95 | // from SRV and updates the server list on a regular basis. |
| 96 | func NewMemcachedClient(cfg MemcachedClientConfig, name string, r prometheus.Registerer, logger log.Logger) MemcachedClient { |
| 97 | var selector serverSelector |
| 98 | if cfg.ConsistentHash { |
| 99 | selector = &MemcachedJumpHashSelector{} |
| 100 | } else { |
| 101 | selector = &memcache.ServerList{} |
| 102 | } |
| 103 | |
| 104 | client := memcache.NewFromSelector(selector) |
| 105 | client.Timeout = cfg.Timeout |
| 106 | client.MaxIdleConns = cfg.MaxIdleConns |
| 107 | |
| 108 | dnsProviderRegisterer := prometheus.WrapRegistererWithPrefix("cortex_", prometheus.WrapRegistererWith(prometheus.Labels{ |
| 109 | "name": name, |
| 110 | }, r)) |
| 111 | |
| 112 | newClient := &memcachedClient{ |
| 113 | name: name, |
| 114 | Client: client, |
| 115 | serverList: selector, |
| 116 | hostname: cfg.Host, |
| 117 | service: cfg.Service, |
| 118 | logger: logger, |
| 119 | provider: dns.NewProvider(logger, dnsProviderRegisterer, dns.GolangResolverType), |
| 120 | cbs: make(map[string]*gobreaker.CircuitBreaker), |
| 121 | cbFailures: cfg.CBFailures, |
| 122 | cbInterval: cfg.CBInterval, |
| 123 | cbTimeout: cfg.CBTimeout, |
| 124 | maxItemSize: cfg.MaxItemSize, |
| 125 | quit: make(chan struct{}), |
| 126 | |
| 127 | numServers: promauto.With(r).NewGauge(prometheus.GaugeOpts{ |
| 128 | Namespace: "cortex", |
| 129 | Name: "memcache_client_servers", |
| 130 | Help: "The number of memcache servers discovered.", |
| 131 | ConstLabels: prometheus.Labels{"name": name}, |
| 132 | }), |
| 133 | |
| 134 | skipped: promauto.With(r).NewCounter(prometheus.CounterOpts{ |
| 135 | Namespace: "cortex", |
| 136 | Name: "memcache_client_set_skip_total", |
| 137 | Help: "Total number of skipped set operations because of the value is larger than the max-item-size.", |
| 138 | ConstLabels: prometheus.Labels{"name": name}, |
| 139 | }), |
| 140 | } |
| 141 | if cfg.CBFailures > 0 { |
| 142 | newClient.DialContext = newClient.dialViaCircuitBreaker |
| 143 | } |
| 144 | |
| 145 | if len(cfg.Addresses) > 0 { |
| 146 | newClient.addresses = strings.Split(cfg.Addresses, ",") |
| 147 | } |
| 148 | |
| 149 | err := newClient.updateMemcacheServers() |
| 150 | if err != nil { |
| 151 | level.Error(logger).Log("msg", "error setting memcache servers to host", "host", cfg.Host, "err", err) |
| 152 | } |
| 153 |
no test coverage detected