MCPcopy Create free account
hub / github.com/cortexproject/cortex / NewMemcachedClient

Function NewMemcachedClient

pkg/chunk/cache/memcached_client.go:96–157  ·  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

94// NewMemcachedClient creates a new MemcacheClient that gets its server list
95// from SRV and updates the server list on a regular basis.
96func 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

Callers 1

NewFunction · 0.85

Calls 5

updateMemcacheServersMethod · 0.95
updateLoopMethod · 0.95
LogMethod · 0.45
ErrorMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected