diff --git a/model/metric.go b/model/metric.go index a9f0d32429..a8af0ffb78 100644 --- a/model/metric.go +++ b/model/metric.go @@ -96,15 +96,8 @@ type SamplePair struct { Timestamp time.Time } -func (s SamplePair) Equal(o SamplePair) (equal bool) { - switch { - case !s.Value.Equal(o.Value): - return - case !s.Timestamp.Equal(o.Timestamp): - return - } - - return true +func (s SamplePair) Equal(o SamplePair) bool { + return s.Value.Equal(o.Value) && s.Timestamp.Equal(o.Timestamp) } type Values []SamplePair @@ -158,7 +151,7 @@ func (v Values) TruncateBefore(t time.Time) (values Values) { index := sort.Search(len(v), func(i int) bool { timestamp := v[i].Timestamp - return timestamp.After(t) || timestamp.Equal(t) + return !timestamp.Before(t) }) switch index { diff --git a/storage/metric/tiered.go b/storage/metric/tiered.go index 5a7c447f35..c4364f7311 100644 --- a/storage/metric/tiered.go +++ b/storage/metric/tiered.go @@ -417,13 +417,13 @@ func (t *tieredStorage) renderView(viewJob viewJob) { break } + chunk = chunk.TruncateBefore(targetTime) + lastChunkTime := chunk[len(chunk)-1].Timestamp if lastChunkTime.After(targetTime) { targetTime = lastChunkTime } - chunk = chunk.TruncateBefore(targetTime) - // For each op, extract all needed data from the current chunk. out := model.Values{} for _, op := range standingOps {