diff --git a/CHANGELOG.md b/CHANGELOG.md index af865528c6..72d41afe82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * [FEATURE] Store Gateway: Add an in-memory chunk cache. #6245 * [FEATURE] Chunk Cache: Support multi level cache and add metrics. #6249 * [ENHANCEMENT] Query Frontend: Add new query stats metrics `cortex_query_samples_scanned_total` and `cortex_query_peak_samples` to track scannedSamples and peakSample per user. #6228 +* [ENHANCEMENT] Index Cache: Add a configuration for an index cache ttl. #6234 * [ENHANCEMENT] Ingester: Add `blocks-storage.tsdb.wal-compression-type` to support zstd wal compression type. #6232 * [ENHANCEMENT] Query Frontend: Add info field to query response. #6207 * [ENHANCEMENT] Query Frontend: Add peakSample in query stats response. #6188 diff --git a/docs/blocks-storage/querier.md b/docs/blocks-storage/querier.md index 360775fe7e..bda94275c9 100644 --- a/docs/blocks-storage/querier.md +++ b/docs/blocks-storage/querier.md @@ -666,6 +666,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -796,6 +800,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur # when backfilling cache items. diff --git a/docs/blocks-storage/store-gateway.md b/docs/blocks-storage/store-gateway.md index 66047f3c52..04e0ba697e 100644 --- a/docs/blocks-storage/store-gateway.md +++ b/docs/blocks-storage/store-gateway.md @@ -757,6 +757,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -887,6 +891,10 @@ blocks_storage: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur # when backfilling cache items. diff --git a/docs/configuration/config-file-reference.md b/docs/configuration/config-file-reference.md index a841909e5c..076738b23d 100644 --- a/docs/configuration/config-file-reference.md +++ b/docs/configuration/config-file-reference.md @@ -1194,6 +1194,10 @@ bucket_store: # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.memcached.index-ttl + [index_ttl: | default = 24h] + redis: # Comma separated list of redis addresses. Supported prefixes are: dns+ # (looked up as an A/AAAA query), dnssrv+ (looked up as a SRV query, @@ -1323,6 +1327,10 @@ bucket_store: # CLI flag: -blocks-storage.bucket-store.index-cache.redis.enabled-items [enabled_items: | default = []] + # How long to cache an index for a block. + # CLI flag: -blocks-storage.bucket-store.index-cache.redis.index-ttl + [index_ttl: | default = 24h] + multilevel: # The maximum number of concurrent asynchronous operations can occur when # backfilling cache items. diff --git a/pkg/storage/tsdb/index_cache.go b/pkg/storage/tsdb/index_cache.go index ae30154d9f..c111a2f782 100644 --- a/pkg/storage/tsdb/index_cache.go +++ b/pkg/storage/tsdb/index_cache.go @@ -157,6 +157,7 @@ func (cfg *InMemoryIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, pr type MemcachedIndexCacheConfig struct { ClientConfig MemcachedClientConfig `yaml:",inline"` EnabledItems []string `yaml:"enabled_items"` + IndexTTL time.Duration `yaml:"index_ttl"` } func (cfg *MemcachedIndexCacheConfig) Validate() error { @@ -169,16 +170,19 @@ func (cfg *MemcachedIndexCacheConfig) Validate() error { func (cfg *MemcachedIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix string) { cfg.ClientConfig.RegisterFlagsWithPrefix(f, prefix) f.Var((*flagext.StringSlice)(&cfg.EnabledItems), prefix+"enabled-items", "Selectively cache index item types. Supported values are Postings, ExpandedPostings and Series") + f.DurationVar(&cfg.IndexTTL, prefix+"index-ttl", defaultTTL, "How long to cache an index for a block.") } type RedisIndexCacheConfig struct { ClientConfig RedisClientConfig `yaml:",inline"` EnabledItems []string `yaml:"enabled_items"` + IndexTTL time.Duration `yaml:"index_ttl"` } func (cfg *RedisIndexCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix string) { cfg.ClientConfig.RegisterFlagsWithPrefix(f, prefix) f.Var((*flagext.StringSlice)(&cfg.EnabledItems), prefix+"enabled-items", "Selectively cache index item types. Supported values are Postings, ExpandedPostings and Series") + f.DurationVar(&cfg.IndexTTL, prefix+"index-ttl", defaultTTL, "How long to cache an index for a block.") } func (cfg *RedisIndexCacheConfig) Validate() error { @@ -217,8 +221,7 @@ func NewIndexCache(cfg IndexCacheConfig, logger log.Logger, registerer prometheu if err != nil { return nil, err } - // TODO(yeya24): expose TTL - cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, defaultTTL) + cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, cfg.Memcached.IndexTTL) if err != nil { return nil, err } @@ -229,8 +232,7 @@ func NewIndexCache(cfg IndexCacheConfig, logger log.Logger, registerer prometheu if err != nil { return nil, err } - // TODO(yeya24): expose TTL - cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, defaultTTL) + cache, err := storecache.NewRemoteIndexCache(logger, c, nil, iReg, cfg.Redis.IndexTTL) if err != nil { return nil, err }