diff --git a/storage/remote/read.go b/storage/remote/read.go index c04d126dfc..81d0776636 100644 --- a/storage/remote/read.go +++ b/storage/remote/read.go @@ -173,9 +173,7 @@ func (c *concreteSeries) Labels() labels.Labels { } func (c *concreteSeries) Iterator() storage.SeriesIterator { - return &concreteSeriesIterator{ - series: c, - } + return newConcreteSeriersIterator(c) } // concreteSeriesIterator implements storage.SeriesIterator. @@ -184,11 +182,18 @@ type concreteSeriesIterator struct { series *concreteSeries } +func newConcreteSeriersIterator(series *concreteSeries) storage.SeriesIterator { + return &concreteSeriesIterator{ + cur: -1, + series: series, + } +} + func (c *concreteSeriesIterator) Seek(t int64) bool { c.cur = sort.Search(len(c.series.samples), func(n int) bool { - return c.series.samples[c.cur].Timestamp > t + return c.series.samples[n].Timestamp >= t }) - return c.cur == 0 + return c.cur < len(c.series.samples) } func (c *concreteSeriesIterator) At() (t int64, v float64) { @@ -240,18 +245,3 @@ func removeLabels(l labels.Labels, toDelete model.LabelSet) { } } } - -//// MatrixToIterators returns series iterators for a given matrix. -//func MatrixToIterators(m model.Matrix, err error) ([]local.SeriesIterator, error) { -// if err != nil { -// return nil, err -// } -// -// its := make([]local.SeriesIterator, 0, len(m)) -// for _, ss := range m { -// its = append(its, sampleStreamIterator{ -// ss: ss, -// }) -// } -// return its, nil -//}