@@ -43,9 +43,15 @@ type FlatAccnt struct {
43
43
eventQ chan FlatAccntEvent
44
44
}
45
45
46
+ type chunkSize struct {
47
+ len uint64
48
+ cap uint64
49
+ }
50
+
46
51
type FlatAccntMet struct {
47
- total uint64
48
- chunks map [uint32 ]uint64
52
+ totalLen uint64
53
+ totalCap uint64
54
+ chunks map [uint32 ]chunkSize
49
55
}
50
56
51
57
type FlatAccntEvent struct {
@@ -70,7 +76,7 @@ const (
70
76
type AddPayload struct {
71
77
metric schema.AMKey
72
78
ts uint32
73
- size uint64
79
+ size chunkSize
74
80
}
75
81
76
82
// payload to be sent with an add event
@@ -125,8 +131,8 @@ func (a *FlatAccnt) GetTotal() uint64 {
125
131
return <- res_chan
126
132
}
127
133
128
- func (a * FlatAccnt ) AddChunk (metric schema.AMKey , ts uint32 , size uint64 ) {
129
- a .act (evnt_add_chnk , & AddPayload {metric , ts , size })
134
+ func (a * FlatAccnt ) AddChunk (metric schema.AMKey , ts uint32 , len , cap uint64 ) {
135
+ a .act (evnt_add_chnk , & AddPayload {metric , ts , chunkSize { len : len , cap : cap } })
130
136
}
131
137
132
138
func (a * FlatAccnt ) AddChunks (metric schema.AMKey , chunks []chunk.IterGen ) {
@@ -222,6 +228,7 @@ func (a *FlatAccnt) eventLoop() {
222
228
a .metrics = make (map [schema.AMKey ]* FlatAccntMet )
223
229
a .lru .reset ()
224
230
cacheSizeUsed .SetUint64 (0 )
231
+ cacheCapUsed .SetUint64 (0 )
225
232
}
226
233
227
234
// evict until we're below the max
@@ -251,31 +258,35 @@ func (a *FlatAccnt) delMet(metric schema.AMKey) {
251
258
)
252
259
}
253
260
254
- cacheSizeUsed .DecUint64 (met .total )
261
+ cacheSizeUsed .DecUint64 (met .totalLen )
262
+ cacheCapUsed .DecUint64 (met .totalCap )
255
263
delete (a .metrics , metric )
256
264
}
257
265
258
- func (a * FlatAccnt ) add (metric schema.AMKey , ts uint32 , size uint64 ) {
266
+ func (a * FlatAccnt ) add (metric schema.AMKey , ts uint32 , size chunkSize ) {
259
267
var met * FlatAccntMet
260
268
var ok bool
261
269
262
270
if met , ok = a .metrics [metric ]; ! ok {
263
271
met = & FlatAccntMet {
264
- total : 0 ,
265
- chunks : make (map [uint32 ]uint64 ),
272
+ totalLen : 0 ,
273
+ totalCap : 0 ,
274
+ chunks : make (map [uint32 ]chunkSize ),
266
275
}
267
276
a .metrics [metric ] = met
268
277
cacheMetricAdd .Inc ()
269
- }
270
-
271
- if _ , ok = met . chunks [ ts ]; ok {
272
- // we already have that chunk
273
- return
278
+ } else {
279
+ if _ , ok = met . chunks [ ts ]; ok {
280
+ // we already have that chunk
281
+ return
282
+ }
274
283
}
275
284
276
285
met .chunks [ts ] = size
277
- met .total = met .total + size
278
- cacheSizeUsed .AddUint64 (size )
286
+ met .totalLen = met .totalLen + size .len
287
+ met .totalCap = met .totalCap + size .cap
288
+ cacheSizeUsed .AddUint64 (size .len )
289
+ cacheCapUsed .AddUint64 (size .cap )
279
290
}
280
291
281
292
func (a * FlatAccnt ) addRange (metric schema.AMKey , chunks []chunk.IterGen ) {
@@ -284,34 +295,39 @@ func (a *FlatAccnt) addRange(metric schema.AMKey, chunks []chunk.IterGen) {
284
295
285
296
if met , ok = a .metrics [metric ]; ! ok {
286
297
met = & FlatAccntMet {
287
- total : 0 ,
288
- chunks : make (map [uint32 ]uint64 ),
298
+ totalLen : 0 ,
299
+ totalCap : 0 ,
300
+ chunks : make (map [uint32 ]chunkSize ),
289
301
}
290
302
a .metrics [metric ] = met
291
303
cacheMetricAdd .Inc ()
292
304
}
293
305
294
- var sizeDiff uint64
306
+ var lenDiff uint64
307
+ var capDiff uint64
295
308
296
309
for _ , chunk := range chunks {
297
310
if _ , ok = met .chunks [chunk .Ts ]; ok {
298
311
// we already have that chunk
299
312
continue
300
313
}
301
- size := chunk .Size ()
302
- sizeDiff += size
314
+ size := chunkSize {len : uint64 (len (chunk .B )), cap : uint64 (cap (chunk .B ))}
315
+ lenDiff += size .len
316
+ capDiff += size .cap
303
317
met .chunks [chunk .Ts ] = size
304
318
}
305
319
306
- met .total = met .total + sizeDiff
307
- cacheSizeUsed .AddUint64 (sizeDiff )
320
+ met .totalLen = met .totalLen + lenDiff
321
+ met .totalCap = met .totalCap + capDiff
322
+ cacheSizeUsed .AddUint64 (lenDiff )
323
+ cacheCapUsed .AddUint64 (capDiff )
308
324
}
309
325
310
326
func (a * FlatAccnt ) evict () {
311
327
var met * FlatAccntMet
312
328
var targets []uint32
313
329
var ts uint32
314
- var size uint64
330
+ var size chunkSize
315
331
var ok bool
316
332
var e interface {}
317
333
var target EvictTarget
@@ -342,8 +358,10 @@ func (a *FlatAccnt) evict() {
342
358
343
359
for _ , ts = range targets {
344
360
size = met .chunks [ts ]
345
- met .total = met .total - size
346
- cacheSizeUsed .DecUint64 (size )
361
+ met .totalLen = met .totalLen - size .len
362
+ met .totalCap = met .totalCap - size .cap
363
+ cacheSizeUsed .DecUint64 (size .len )
364
+ cacheCapUsed .DecUint64 (size .cap )
347
365
cacheChunkEvict .Inc ()
348
366
a .evictQ <- & EvictTarget {
349
367
Metric : target .Metric ,
@@ -352,7 +370,7 @@ func (a *FlatAccnt) evict() {
352
370
delete (met .chunks , ts )
353
371
}
354
372
355
- if met .total <= 0 {
373
+ if met .totalLen <= 0 {
356
374
cacheMetricEvict .Inc ()
357
375
delete (a .metrics , target .Metric )
358
376
}
0 commit comments