(op string, err error, msg ...interface{})
| 640 | } |
| 641 | |
| 642 | func (c *MemcachedClient) trackError(op string, err error, msg ...interface{}) { |
| 643 | severity := level.DebugValue() |
| 644 | |
| 645 | var connErr *memcache.ConnectTimeoutError |
| 646 | var netErr net.Error |
| 647 | switch { |
| 648 | case errors.As(err, &connErr): |
| 649 | c.metrics.failures.WithLabelValues(op, reasonConnectTimeout).Inc() |
| 650 | case errors.As(err, &netErr): |
| 651 | if netErr.Timeout() { |
| 652 | c.metrics.failures.WithLabelValues(op, reasonTimeout).Inc() |
| 653 | } else { |
| 654 | c.metrics.failures.WithLabelValues(op, reasonNetworkError).Inc() |
| 655 | } |
| 656 | case errors.Is(err, ErrNotStored): |
| 657 | c.metrics.failures.WithLabelValues(op, reasonNotStored).Inc() |
| 658 | case errors.Is(err, ErrInvalidTTL): |
| 659 | c.metrics.failures.WithLabelValues(op, reasonInvalidTTL).Inc() |
| 660 | case errors.Is(err, memcache.ErrMalformedKey): |
| 661 | c.metrics.failures.WithLabelValues(op, reasonMalformedKey).Inc() |
| 662 | case errors.Is(err, memcache.ErrServerError): |
| 663 | c.metrics.failures.WithLabelValues(op, reasonServerError).Inc() |
| 664 | case errors.Is(err, context.Canceled): |
| 665 | c.metrics.failures.WithLabelValues(op, reasonCanceled).Inc() |
| 666 | default: |
| 667 | c.metrics.failures.WithLabelValues(op, reasonOther).Inc() |
| 668 | severity = level.WarnValue() // Log unexpected kinds of errors with higher severity so they're easier to diagnose. |
| 669 | } |
| 670 | |
| 671 | logger := log.WithPrefix(c.logger, level.Key(), severity) |
| 672 | logger = log.WithSuffix(logger, "err", err) |
| 673 | logger.Log(msg...) |
| 674 | } |
| 675 | |
| 676 | func (c *MemcachedClient) getMultiBatched(ctx context.Context, keys []string, opts ...memcache.Option) ([]map[string]*memcache.Item, error) { |
| 677 | // Do not batch if the input keys are less than the max batch size. |
no test coverage detected