From a1a23fbaf838918fb6418ba43a971d76577a8075 Mon Sep 17 00:00:00 2001 From: "Matt T. Proud" Date: Fri, 21 Jun 2013 09:42:45 +0200 Subject: [PATCH] Ensure new metrics are watermarked early. With the checking of fingerprint freshness to cull stale metrics from queries, we should write watermarks early to aid in more accurate responses. --- storage/metric/leveldb.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/storage/metric/leveldb.go b/storage/metric/leveldb.go index 511748e251..7de237e170 100644 --- a/storage/metric/leveldb.go +++ b/storage/metric/leveldb.go @@ -488,26 +488,28 @@ func (l *LevelDBMetricPersistence) refreshHighWatermarks(groups map[model.Finger batch := leveldb.NewBatch() defer batch.Close() - mutationCount := 0 + value := &dto.MetricHighWatermark{} for fingerprint, samples := range groups { - value := &dto.MetricHighWatermark{} - newestSampleTimestamp := samples[len(samples)-1].Timestamp + value.Reset() present, err := l.MetricHighWatermarks.Get(fingerprint.ToDTO(), value) if err != nil { return err } + + newestSampleTimestamp := samples[len(samples)-1].Timestamp + if !present { + value.Timestamp = proto.Int64(newestSampleTimestamp.Unix()) + batch.Put(fingerprint.ToDTO(), value) + continue } // BUG(matt): Repace this with watermark management. - if newestSampleTimestamp.Before(time.Unix(*value.Timestamp, 0)) { - continue + if !newestSampleTimestamp.Before(time.Unix(value.GetTimestamp(), 0)) { + value.Timestamp = proto.Int64(newestSampleTimestamp.Unix()) + batch.Put(fingerprint.ToDTO(), value) } - - value.Timestamp = proto.Int64(newestSampleTimestamp.Unix()) - batch.Put(fingerprint.ToDTO(), value) - mutationCount++ } err = l.MetricHighWatermarks.Commit(batch)