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)
| 108 | // NewMemcachedClient creates a new MemcacheClient that gets its server list |
| 109 | // from SRV and updates the server list on a regular basis. |
| 110 | func NewMemcachedClient(cfg MemcachedClientConfig, name string, r prometheus.Registerer, logger log.Logger) MemcachedClient { |
| 111 | var selector serverSelector |
| 112 | if cfg.ConsistentHash { |
| 113 | selector = &MemcachedJumpHashSelector{} |
| 114 | } else { |
| 115 | selector = &memcache.ServerList{} |
| 116 | } |
| 117 | |
| 118 | client := memcache.NewFromSelector(selector) |
| 119 | client.Timeout = cfg.Timeout |
| 120 | client.MaxIdleConns = cfg.MaxIdleConns |
| 121 | |
| 122 | dnsProviderRegisterer := prometheus.WrapRegistererWithPrefix("tempo_", prometheus.WrapRegistererWith(prometheus.Labels{ |
| 123 | "name": name, |
| 124 | }, r)) |
| 125 | |
| 126 | dialTimeout := net.DialTimeout |
| 127 | if cfg.TLSEnabled { |
| 128 | cfg, err := cfg.TLS.GetTLSConfig() |
| 129 | if err != nil { |
| 130 | level.Error(logger).Log("msg", "couldn't create TLS configuration", "err", err) |
| 131 | } else { |
| 132 | dialTimeout = func(network string, address string, timeout time.Duration) (net.Conn, error) { |
| 133 | base := new(net.Dialer) |
| 134 | base.Timeout = timeout |
| 135 | |
| 136 | return tls.DialWithDialer(base, network, address, cfg) |
| 137 | } |
| 138 | } |
| 139 | } |
| 140 | |
| 141 | newClient := &memcachedClient{ |
| 142 | DialTimeout: dialTimeout, |
| 143 | name: name, |
| 144 | Client: client, |
| 145 | cfg: cfg, |
| 146 | serverList: selector, |
| 147 | hostname: cfg.Host, |
| 148 | service: cfg.Service, |
| 149 | logger: logger, |
| 150 | provider: dns.NewProvider(logger, dnsProviderRegisterer, dns.GolangResolverType), |
| 151 | cbs: make(map[string]*gobreaker.CircuitBreaker), |
| 152 | cbFailures: cfg.CBFailures, |
| 153 | cbInterval: cfg.CBInterval, |
| 154 | cbTimeout: cfg.CBTimeout, |
| 155 | maxItemSize: cfg.MaxItemSize, |
| 156 | quit: make(chan struct{}), |
| 157 | |
| 158 | numServers: promauto.With(r).NewGauge(prometheus.GaugeOpts{ |
| 159 | Namespace: "tempo", |
| 160 | Name: "memcache_client_servers", |
| 161 | Help: "The number of memcache servers discovered.", |
| 162 | ConstLabels: prometheus.Labels{"name": name}, |
| 163 | }), |
| 164 | |
| 165 | skipped: promauto.With(r).NewCounter(prometheus.CounterOpts{ |
| 166 | Namespace: "tempo", |
| 167 | Name: "memcache_client_set_skip_total", |
no test coverage detected