@@ -26,11 +26,10 @@ import (
26
26
)
27
27
28
28
var (
29
- supportedChunkCacheBackends = []string {CacheBackendInMemory , CacheBackendMemcached , CacheBackendRedis }
30
- supportedMetadataCacheBackends = []string {CacheBackendMemcached , CacheBackendRedis }
29
+ supportedBucketCacheBackends = []string {CacheBackendInMemory , CacheBackendMemcached , CacheBackendRedis }
31
30
32
- errUnsupportedChunkCacheBackend = errors .New ("unsupported chunk cache backend" )
33
- errDuplicatedChunkCacheBackend = errors .New ("duplicated chunk cache backend" )
31
+ errUnsupportedBucketCacheBackend = errors .New ("unsupported cache backend" )
32
+ errDuplicatedBucketCacheBackend = errors .New ("duplicated cache backend" )
34
33
)
35
34
36
35
const (
@@ -39,36 +38,16 @@ const (
39
38
CacheBackendInMemory = "inmemory"
40
39
)
41
40
42
- type MetadataCacheBackend struct {
43
- Backend string `yaml:"backend"`
44
- Memcached MemcachedClientConfig `yaml:"memcached"`
45
- Redis RedisClientConfig `yaml:"redis"`
41
+ type BucketCacheBackend struct {
42
+ Backend string `yaml:"backend"`
43
+ InMemory InMemoryBucketCacheConfig `yaml:"inmemory"`
44
+ Memcached MemcachedClientConfig `yaml:"memcached"`
45
+ Redis RedisClientConfig `yaml:"redis"`
46
+ MultiLevel MultiLevelBucketCacheConfig `yaml:"multilevel"`
46
47
}
47
48
48
49
// Validate the config.
49
- func (cfg * MetadataCacheBackend ) Validate () error {
50
- switch cfg .Backend {
51
- case CacheBackendMemcached :
52
- return cfg .Memcached .Validate ()
53
- case CacheBackendRedis :
54
- return cfg .Redis .Validate ()
55
- case "" :
56
- default :
57
- return fmt .Errorf ("unsupported cache backend: %s" , cfg .Backend )
58
- }
59
- return nil
60
- }
61
-
62
- type ChunkCacheBackend struct {
63
- Backend string `yaml:"backend"`
64
- InMemory InMemoryChunkCacheConfig `yaml:"inmemory"`
65
- Memcached MemcachedClientConfig `yaml:"memcached"`
66
- Redis RedisClientConfig `yaml:"redis"`
67
- MultiLevel MultiLevelChunkCacheConfig `yaml:"multilevel"`
68
- }
69
-
70
- // Validate the config.
71
- func (cfg * ChunkCacheBackend ) Validate () error {
50
+ func (cfg * BucketCacheBackend ) Validate () error {
72
51
if cfg .Backend == "" {
73
52
return nil
74
53
}
@@ -83,12 +62,12 @@ func (cfg *ChunkCacheBackend) Validate() error {
83
62
}
84
63
85
64
for _ , backend := range splitBackends {
86
- if ! util .StringsContain (supportedChunkCacheBackends , backend ) {
87
- return errUnsupportedChunkCacheBackend
65
+ if ! util .StringsContain (supportedBucketCacheBackends , backend ) {
66
+ return errUnsupportedBucketCacheBackend
88
67
}
89
68
90
69
if _ , ok := configuredBackends [backend ]; ok {
91
- return errDuplicatedChunkCacheBackend
70
+ return errDuplicatedBucketCacheBackend
92
71
}
93
72
94
73
switch backend {
@@ -110,7 +89,7 @@ func (cfg *ChunkCacheBackend) Validate() error {
110
89
}
111
90
112
91
type ChunksCacheConfig struct {
113
- ChunkCacheBackend `yaml:",inline"`
92
+ BucketCacheBackend `yaml:",inline"`
114
93
115
94
SubrangeSize int64 `yaml:"subrange_size"`
116
95
MaxGetRangeRequests int `yaml:"max_get_range_requests"`
@@ -121,11 +100,11 @@ type ChunksCacheConfig struct {
121
100
func (cfg * ChunksCacheConfig ) RegisterFlagsWithPrefix (f * flag.FlagSet , prefix string ) {
122
101
f .StringVar (& cfg .Backend , prefix + "backend" , "" , fmt .Sprintf ("The chunks cache backend type. Single or Multiple cache backend can be provided. " +
123
102
"Supported values in single cache: %s, %s, %s, and '' (disable). " +
124
- "Supported values in multi level cache: a comma-separated list of (%s)" , CacheBackendMemcached , CacheBackendRedis , CacheBackendInMemory , strings .Join (supportedChunkCacheBackends , ", " )))
103
+ "Supported values in multi level cache: a comma-separated list of (%s)" , CacheBackendMemcached , CacheBackendRedis , CacheBackendInMemory , strings .Join (supportedBucketCacheBackends , ", " )))
125
104
126
105
cfg .Memcached .RegisterFlagsWithPrefix (f , prefix + "memcached." )
127
106
cfg .Redis .RegisterFlagsWithPrefix (f , prefix + "redis." )
128
- cfg .InMemory .RegisterFlagsWithPrefix (f , prefix + "inmemory." )
107
+ cfg .InMemory .RegisterFlagsWithPrefix (f , prefix + "inmemory." , "chunks" )
129
108
cfg .MultiLevel .RegisterFlagsWithPrefix (f , prefix + "multilevel." )
130
109
131
110
f .Int64Var (& cfg .SubrangeSize , prefix + "subrange-size" , 16000 , "Size of each subrange that bucket object is split into for better caching." )
@@ -138,18 +117,18 @@ func (cfg *ChunksCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix st
138
117
}
139
118
140
119
func (cfg * ChunksCacheConfig ) Validate () error {
141
- return cfg .ChunkCacheBackend .Validate ()
120
+ return cfg .BucketCacheBackend .Validate ()
142
121
}
143
122
144
- type InMemoryChunkCacheConfig struct {
123
+ type InMemoryBucketCacheConfig struct {
145
124
MaxSizeBytes uint64 `yaml:"max_size_bytes"`
146
125
}
147
126
148
- func (cfg * InMemoryChunkCacheConfig ) RegisterFlagsWithPrefix (f * flag.FlagSet , prefix string ) {
149
- f .Uint64Var (& cfg .MaxSizeBytes , prefix + "max-size-bytes" , uint64 (1 * units .Gibibyte ), "Maximum size in bytes of in-memory chunk cache used to speed up chunk lookups (shared between all tenants)." )
127
+ func (cfg * InMemoryBucketCacheConfig ) RegisterFlagsWithPrefix (f * flag.FlagSet , prefix string , item string ) {
128
+ f .Uint64Var (& cfg .MaxSizeBytes , prefix + "max-size-bytes" , uint64 (1 * units .Gibibyte ), fmt . Sprintf ( "Maximum size in bytes of in-memory %s cache used (shared between all tenants)." , item ) )
150
129
}
151
130
152
- func (cfg * InMemoryChunkCacheConfig ) toInMemoryChunkCacheConfig () cache.InMemoryCacheConfig {
131
+ func (cfg * InMemoryBucketCacheConfig ) toInMemoryCacheConfig () cache.InMemoryCacheConfig {
153
132
maxCacheSize := model .Bytes (cfg .MaxSizeBytes )
154
133
155
134
// Calculate the max item size.
@@ -165,7 +144,7 @@ func (cfg *InMemoryChunkCacheConfig) toInMemoryChunkCacheConfig() cache.InMemory
165
144
}
166
145
167
146
type MetadataCacheConfig struct {
168
- MetadataCacheBackend `yaml:",inline"`
147
+ BucketCacheBackend `yaml:",inline"`
169
148
170
149
TenantsListTTL time.Duration `yaml:"tenants_list_ttl"`
171
150
TenantBlocksListTTL time.Duration `yaml:"tenant_blocks_list_ttl"`
@@ -181,10 +160,14 @@ type MetadataCacheConfig struct {
181
160
}
182
161
183
162
func (cfg * MetadataCacheConfig ) RegisterFlagsWithPrefix (f * flag.FlagSet , prefix string ) {
184
- f .StringVar (& cfg .Backend , prefix + "backend" , "" , fmt .Sprintf ("Backend for metadata cache, if not empty. Supported values: %s, and '' (disable)." , strings .Join (supportedMetadataCacheBackends , ", " )))
163
+ f .StringVar (& cfg .Backend , prefix + "backend" , "" , fmt .Sprintf ("The metadata cache backend type. Single or Multiple cache backend can be provided. " +
164
+ "Supported values in single cache: %s, %s, %s, and '' (disable). " +
165
+ "Supported values in multi level cache: a comma-separated list of (%s)" , CacheBackendMemcached , CacheBackendRedis , CacheBackendInMemory , strings .Join (supportedBucketCacheBackends , ", " )))
185
166
186
167
cfg .Memcached .RegisterFlagsWithPrefix (f , prefix + "memcached." )
187
168
cfg .Redis .RegisterFlagsWithPrefix (f , prefix + "redis." )
169
+ cfg .InMemory .RegisterFlagsWithPrefix (f , prefix + "inmemory." , "metadata" )
170
+ cfg .MultiLevel .RegisterFlagsWithPrefix (f , prefix + "multilevel." )
188
171
189
172
f .DurationVar (& cfg .TenantsListTTL , prefix + "tenants-list-ttl" , 15 * time .Minute , "How long to cache list of tenants in the bucket." )
190
173
f .DurationVar (& cfg .TenantBlocksListTTL , prefix + "tenant-blocks-list-ttl" , 5 * time .Minute , "How long to cache list of blocks for each tenant." )
@@ -200,14 +183,14 @@ func (cfg *MetadataCacheConfig) RegisterFlagsWithPrefix(f *flag.FlagSet, prefix
200
183
}
201
184
202
185
func (cfg * MetadataCacheConfig ) Validate () error {
203
- return cfg .MetadataCacheBackend .Validate ()
186
+ return cfg .BucketCacheBackend .Validate ()
204
187
}
205
188
206
189
func CreateCachingBucket (chunksConfig ChunksCacheConfig , metadataConfig MetadataCacheConfig , matchers Matchers , bkt objstore.InstrumentedBucket , logger log.Logger , reg prometheus.Registerer ) (objstore.InstrumentedBucket , error ) {
207
190
cfg := cache .NewCachingBucketConfig ()
208
191
cachingConfigured := false
209
192
210
- chunksCache , err := createChunkCache ("chunks-cache" , & chunksConfig .ChunkCacheBackend , logger , reg )
193
+ chunksCache , err := createBucketCache ("chunks-cache" , & chunksConfig .BucketCacheBackend , logger , reg )
211
194
if err != nil {
212
195
return nil , errors .Wrapf (err , "chunks-cache" )
213
196
}
@@ -218,7 +201,7 @@ func CreateCachingBucket(chunksConfig ChunksCacheConfig, metadataConfig Metadata
218
201
cfg .CacheGetRange ("parquet-chunks" , chunksCache , matchers .GetParquetChunksMatcher (), chunksConfig .SubrangeSize , chunksConfig .AttributesTTL , chunksConfig .SubrangeTTL , chunksConfig .MaxGetRangeRequests )
219
202
}
220
203
221
- metadataCache , err := createMetadataCache ("metadata-cache" , & metadataConfig .MetadataCacheBackend , logger , reg )
204
+ metadataCache , err := createBucketCache ("metadata-cache" , & metadataConfig .BucketCacheBackend , logger , reg )
222
205
if err != nil {
223
206
return nil , errors .Wrapf (err , "metadata-cache" )
224
207
}
@@ -255,7 +238,7 @@ func CreateCachingBucketForCompactor(metadataConfig MetadataCacheConfig, cleaner
255
238
cfg := cache .NewCachingBucketConfig ()
256
239
cachingConfigured := false
257
240
258
- metadataCache , err := createMetadataCache ("metadata-cache" , & metadataConfig .MetadataCacheBackend , logger , reg )
241
+ metadataCache , err := createBucketCache ("metadata-cache" , & metadataConfig .BucketCacheBackend , logger , reg )
259
242
if err != nil {
260
243
return nil , errors .Wrapf (err , "metadata-cache" )
261
244
}
@@ -287,32 +270,7 @@ func CreateCachingBucketForCompactor(metadataConfig MetadataCacheConfig, cleaner
287
270
return storecache .NewCachingBucket (bkt , cfg , logger , reg )
288
271
}
289
272
290
- func createMetadataCache (cacheName string , cacheBackend * MetadataCacheBackend , logger log.Logger , reg prometheus.Registerer ) (cache.Cache , error ) {
291
- switch cacheBackend .Backend {
292
- case "" :
293
- // No caching.
294
- return nil , nil
295
- case CacheBackendMemcached :
296
- var client cacheutil.MemcachedClient
297
- client , err := cacheutil .NewMemcachedClientWithConfig (logger , cacheName , cacheBackend .Memcached .ToMemcachedClientConfig (), reg )
298
- if err != nil {
299
- return nil , errors .Wrapf (err , "failed to create memcached client" )
300
- }
301
- return cache .NewMemcachedCache (cacheName , logger , client , reg ), nil
302
-
303
- case CacheBackendRedis :
304
- redisCache , err := cacheutil .NewRedisClientWithConfig (logger , cacheName , cacheBackend .Redis .ToRedisClientConfig (), reg )
305
- if err != nil {
306
- return nil , errors .Wrapf (err , "failed to create redis client" )
307
- }
308
- return cache .NewRedisCache (cacheName , logger , redisCache , reg ), nil
309
-
310
- default :
311
- return nil , errors .Errorf ("unsupported cache type for cache %s: %s" , cacheName , cacheBackend .Backend )
312
- }
313
- }
314
-
315
- func createChunkCache (cacheName string , cacheBackend * ChunkCacheBackend , logger log.Logger , reg prometheus.Registerer ) (cache.Cache , error ) {
273
+ func createBucketCache (cacheName string , cacheBackend * BucketCacheBackend , logger log.Logger , reg prometheus.Registerer ) (cache.Cache , error ) {
316
274
if cacheBackend .Backend == "" {
317
275
// No caching.
318
276
return nil , nil
@@ -326,7 +284,7 @@ func createChunkCache(cacheName string, cacheBackend *ChunkCacheBackend, logger
326
284
for _ , backend := range splitBackends {
327
285
switch backend {
328
286
case CacheBackendInMemory :
329
- inMemoryCache , err := cache .NewInMemoryCacheWithConfig (cacheName , logger , reg , cacheBackend .InMemory .toInMemoryChunkCacheConfig ())
287
+ inMemoryCache , err := cache .NewInMemoryCacheWithConfig (cacheName , logger , reg , cacheBackend .InMemory .toInMemoryCacheConfig ())
330
288
if err != nil {
331
289
return nil , errors .Wrapf (err , "failed to create in-memory chunk cache" )
332
290
}
@@ -347,7 +305,7 @@ func createChunkCache(cacheName string, cacheBackend *ChunkCacheBackend, logger
347
305
}
348
306
}
349
307
350
- return newMultiLevelChunkCache (cacheName , cacheBackend .MultiLevel , reg , caches ... ), nil
308
+ return newMultiLevelBucketCache (cacheName , cacheBackend .MultiLevel , reg , caches ... ), nil
351
309
}
352
310
353
311
type Matchers struct {
0 commit comments