MCPcopy
hub / github.com/grafana/tempo / NewMemcachedClient

Function NewMemcachedClient

pkg/cache/memcached_client.go:110–191  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

108// NewMemcachedClient creates a new MemcacheClient that gets its server list
109// from SRV and updates the server list on a regular basis.
110func 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",

Callers 1

NewClientFunction · 0.92

Calls 7

updateMemcacheServersMethod · 0.95
updateLoopMethod · 0.95
LogMethod · 0.65
ErrorMethod · 0.65
NewGaugeMethod · 0.65
NewCounterMethod · 0.65
AddMethod · 0.65

Tested by

no test coverage detected