func()

in internal/lru/lru.go [67:95]


func (c *Cache) FindOrFetch(cacheNamespace, key string, fetchFn func() (any, error)) (any, error) {
	item := c.cache.Get(cacheNamespace + key)

	if item != nil && !item.Expired() {
		if c.metricCacheRequests != nil {
			c.metricCacheRequests.WithLabelValues(c.op, "hit").Inc()
		}
		return item.Value(), nil
	}

	value, err := fetchFn()
	if err != nil {
		if c.metricCacheRequests != nil {
			c.metricCacheRequests.WithLabelValues(c.op, "error").Inc()
		}
		return nil, err
	}

	if c.metricCacheRequests != nil {
		c.metricCacheRequests.WithLabelValues(c.op, "miss").Inc()
	}
	if c.metricCachedEntries != nil {
		c.metricCachedEntries.WithLabelValues(c.op).Inc()
	}

	c.cache.Set(cacheNamespace+key, value, c.duration)

	return value, nil
}