From 9406afad723a966c58bc1bb993e80e591324ebc4 Mon Sep 17 00:00:00 2001 From: beorn7 Date: Fri, 27 Feb 2015 00:06:16 +0100 Subject: [PATCH] Do not double-count non-persisted head chunks on loading. --- storage/local/persistence.go | 6 ++---- storage/local/storage.go | 6 ++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/storage/local/persistence.go b/storage/local/persistence.go index b152b4e41..15b318228 100644 --- a/storage/local/persistence.go +++ b/storage/local/persistence.go @@ -22,7 +22,6 @@ import ( "path" "path/filepath" "sync" - "sync/atomic" "time" "github.com/golang/glog" @@ -586,7 +585,7 @@ func (p *persistence) checkpointSeriesMapAndHeads(fingerprintToSeries *seriesMap // this method during start-up while nothing else is running in storage // land. This method is utterly goroutine-unsafe. func (p *persistence) loadSeriesMapAndHeads() (sm *seriesMap, err error) { - var chunksTotal, chunkDescsTotal int64 + var chunkDescsTotal int64 fingerprintToSeries := make(map[clientmodel.Fingerprint]*memorySeries) sm = &seriesMap{m: fingerprintToSeries} @@ -599,7 +598,6 @@ func (p *persistence) loadSeriesMapAndHeads() (sm *seriesMap, err error) { } } if err == nil { - atomic.AddInt64(&numMemChunks, chunksTotal) numMemChunkDescs.Add(float64(chunkDescsTotal)) } }() @@ -704,7 +702,6 @@ func (p *persistence) loadSeriesMapAndHeads() (sm *seriesMap, err error) { } } else { // Non-persisted head chunk. - chunksTotal++ chunkType, err := r.ReadByte() if err != nil { glog.Warning("Could not decode chunk type:", err) @@ -718,6 +715,7 @@ func (p *persistence) loadSeriesMapAndHeads() (sm *seriesMap, err error) { return sm, nil } chunkDescs[i] = newChunkDesc(chunk) + chunkDescsTotal-- // Avoid double-counting by newChunkDesc. } } diff --git a/storage/local/storage.go b/storage/local/storage.go index b9955f008..1ff49bb12 100644 --- a/storage/local/storage.go +++ b/storage/local/storage.go @@ -1027,8 +1027,10 @@ func (s *memorySeriesStorage) Collect(ch chan<- prometheus.Metric) { ch <- s.ingestedSamplesCount ch <- s.invalidPreloadRequestsCount - count := atomic.LoadInt64(&numMemChunks) - ch <- prometheus.MustNewConstMetric(numMemChunksDesc, prometheus.GaugeValue, float64(count)) + ch <- prometheus.MustNewConstMetric( + numMemChunksDesc, + prometheus.GaugeValue, + float64(atomic.LoadInt64(&numMemChunks))) } // chunkMaps is a slice of maps with chunkDescs to be persisted.