From 008314b5a8c099f7e2d191da85c53d2a235db518 Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Tue, 21 May 2013 23:19:39 +0200 Subject: [PATCH] Ensure that all extracted samples are added to view. The current behavior only adds those samples to the view that are extracted by the last pass of the last processed op and throws other ones away. This is a bug. We need to append all samples that are extracted by each op pass. This also makes view.appendSamples() take an array of samples. --- storage/metric/memory.go | 14 ++++++++------ storage/metric/tiered.go | 8 +++----- storage/metric/view.go | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/storage/metric/memory.go b/storage/metric/memory.go index f31e6ddee2..8fa1a9ccb2 100644 --- a/storage/metric/memory.go +++ b/storage/metric/memory.go @@ -181,21 +181,23 @@ func (s *memorySeriesStorage) AppendSample(sample model.Sample) error { return nil } -// Append raw sample, bypassing indexing. Only used to add data to views, which -// don't need to lookup by metric. -func (s *memorySeriesStorage) appendSampleWithoutIndexing(f *model.Fingerprint, timestamp time.Time, value model.SampleValue) { +// Append raw samples, bypassing indexing. Only used to add data to views, +// which don't need to lookup by metric. +func (s *memorySeriesStorage) appendSamplesWithoutIndexing(fingerprint *model.Fingerprint, samples model.Values) { s.RLock() - series, ok := s.fingerprintToSeries[*f] + series, ok := s.fingerprintToSeries[*fingerprint] s.RUnlock() if !ok { series = newStream(model.Metric{}) s.Lock() - s.fingerprintToSeries[*f] = series + s.fingerprintToSeries[*fingerprint] = series s.Unlock() } - series.add(timestamp, value) + for _, sample := range samples { + series.add(sample.Timestamp, sample.Value) + } } func (s *memorySeriesStorage) GetFingerprintsForLabelSet(l model.LabelSet) (fingerprints model.Fingerprints, err error) { diff --git a/storage/metric/tiered.go b/storage/metric/tiered.go index 98f9e1d871..7976d24203 100644 --- a/storage/metric/tiered.go +++ b/storage/metric/tiered.go @@ -348,12 +348,10 @@ func (t *TieredStorage) renderView(viewJob viewJob) { for op.CurrentTime() != nil && !op.CurrentTime().After(targetTime) { out = op.ExtractSamples(model.Values(currentChunk)) - } - } - // Append the extracted samples to the materialized view. - for _, sample := range out { - view.appendSample(scanJob.fingerprint, sample.Timestamp, sample.Value) + // Append the extracted samples to the materialized view. + view.appendSamples(scanJob.fingerprint, out) + } } // Throw away standing ops which are finished. diff --git a/storage/metric/view.go b/storage/metric/view.go index a0ef8af7f7..1330e6eac9 100644 --- a/storage/metric/view.go +++ b/storage/metric/view.go @@ -105,8 +105,8 @@ type view struct { *memorySeriesStorage } -func (v view) appendSample(fingerprint *model.Fingerprint, timestamp time.Time, value model.SampleValue) { - v.memorySeriesStorage.appendSampleWithoutIndexing(fingerprint, timestamp, value) +func (v view) appendSamples(fingerprint *model.Fingerprint, samples model.Values) { + v.memorySeriesStorage.appendSamplesWithoutIndexing(fingerprint, samples) } func newView() view {