Add TODOs and some minor tweaks

Signed-off-by: beorn7 <beorn@grafana.com>
This commit is contained in:
beorn7 2021-11-07 17:12:04 +01:00
parent c8b267efd6
commit 8f92c90897
8 changed files with 17 additions and 13 deletions

View file

@ -1767,7 +1767,7 @@ func (ev *evaluator) matrixIterSlice(it *storage.BufferedSeriesIterator, mint, m
} }
} }
} }
// The seeked sample might also be in the range. // The sought sample might also be in the range.
if ok { if ok {
if it.ChunkEncoding() == chunkenc.EncHistogram { if it.ChunkEncoding() == chunkenc.EncHistogram {
t, h := it.HistogramValues() t, h := it.HistogramValues()

View file

@ -87,6 +87,7 @@ type Point struct {
} }
func (p Point) String() string { func (p Point) String() string {
// TODO(beorn7): Support Histogram.
v := strconv.FormatFloat(p.V, 'f', -1, 64) v := strconv.FormatFloat(p.V, 'f', -1, 64)
return fmt.Sprintf("%v @[%v]", v, p.T) return fmt.Sprintf("%v @[%v]", v, p.T)
} }
@ -299,11 +300,9 @@ func (ssi *storageSeriesIterator) At() (t int64, v float64) {
return p.T, p.V return p.T, p.V
} }
// AtHistogram always returns (0, histogram.Histogram{}) because there is no
// support for histogram values yet.
// TODO(beorn7): Fix that for histogram support in PromQL.
func (ssi *storageSeriesIterator) AtHistogram() (int64, histogram.Histogram) { func (ssi *storageSeriesIterator) AtHistogram() (int64, histogram.Histogram) {
return 0, histogram.Histogram{} p := ssi.points[ssi.curr]
return p.T, *p.H
} }
func (ssi *storageSeriesIterator) ChunkEncoding() chunkenc.Encoding { func (ssi *storageSeriesIterator) ChunkEncoding() chunkenc.Encoding {

View file

@ -230,8 +230,6 @@ func (it *sampleRingIterator) At() (int64, float64) {
return it.r.at(it.i) return it.r.at(it.i)
} }
// AtHistogram always returns (0, histogram.Histogram{}) because there is no
// support for histogram values yet.
func (it *sampleRingIterator) AtHistogram() (int64, histogram.Histogram) { func (it *sampleRingIterator) AtHistogram() (int64, histogram.Histogram) {
return it.r.atHistogram(it.i) return it.r.atHistogram(it.i)
} }

View file

@ -216,11 +216,11 @@ func newFakeSeriesIterator(nsamples, step int64) *fakeSeriesIterator {
} }
func (it *fakeSeriesIterator) At() (int64, float64) { func (it *fakeSeriesIterator) At() (int64, float64) {
return it.idx * it.step, 123 // value doesn't matter return it.idx * it.step, 123 // Value doesn't matter.
} }
func (it *fakeSeriesIterator) AtHistogram() (int64, histogram.Histogram) { func (it *fakeSeriesIterator) AtHistogram() (int64, histogram.Histogram) {
return it.idx * it.step, histogram.Histogram{} // value doesn't matter return it.idx * it.step, histogram.Histogram{} // Value doesn't matter.
} }
func (it *fakeSeriesIterator) ChunkEncoding() chunkenc.Encoding { func (it *fakeSeriesIterator) ChunkEncoding() chunkenc.Encoding {

View file

@ -91,10 +91,9 @@ func (it *listSeriesIterator) At() (int64, float64) {
return s.T(), s.V() return s.T(), s.V()
} }
// AtHistogram always returns (0, histogram.Histogram{}) because there is no
// support for histogram values yet.
func (it *listSeriesIterator) AtHistogram() (int64, histogram.Histogram) { func (it *listSeriesIterator) AtHistogram() (int64, histogram.Histogram) {
return 0, histogram.Histogram{} s := it.samples.Get(it.idx)
return s.T(), *s.H()
} }
func (it *listSeriesIterator) ChunkEncoding() chunkenc.Encoding { func (it *listSeriesIterator) ChunkEncoding() chunkenc.Encoding {

View file

@ -89,6 +89,8 @@ type Appender interface {
// Iterator iterates over the samples of a time series, in timestamp-increasing order. // Iterator iterates over the samples of a time series, in timestamp-increasing order.
type Iterator interface { type Iterator interface {
// Next advances the iterator by one. // Next advances the iterator by one.
// TODO(beorn7): Perhaps this should return if the next value is a float or a histogram
// to make it easier calling the right method (At vs AtHistogram)?
Next() bool Next() bool
// Seek advances the iterator forward to the first sample with the timestamp equal or greater than t. // Seek advances the iterator forward to the first sample with the timestamp equal or greater than t.
// If current sample found by previous `Next` or `Seek` operation already has this property, Seek has no effect. // If current sample found by previous `Next` or `Seek` operation already has this property, Seek has no effect.
@ -100,6 +102,7 @@ type Iterator interface {
At() (int64, float64) At() (int64, float64)
// AtHistogram returns the current timestamp/histogram pair. // AtHistogram returns the current timestamp/histogram pair.
// Before the iterator has advanced AtHistogram behaviour is unspecified. // Before the iterator has advanced AtHistogram behaviour is unspecified.
// TODO(beorn7): Maybe return *histogram.Histogram? It's a fairly large struct.
AtHistogram() (int64, histogram.Histogram) AtHistogram() (int64, histogram.Histogram)
// Err returns the current error. It should be used only after iterator is // Err returns the current error. It should be used only after iterator is
// exhausted, that is `Next` or `Seek` returns false. // exhausted, that is `Next` or `Seek` returns false.

View file

@ -166,6 +166,7 @@ func (it *sampleRingIterator) At() (int64, float64) {
} }
func (it *sampleRingIterator) AtHistogram() (int64, histogram.Histogram) { func (it *sampleRingIterator) AtHistogram() (int64, histogram.Histogram) {
// TODO(beorn7): Add proper histogram support.
return 0, histogram.Histogram{} return 0, histogram.Histogram{}
} }

View file

@ -153,7 +153,11 @@ func (it *listSeriesIterator) At() (int64, float64) {
} }
func (it *listSeriesIterator) AtHistogram() (int64, histogram.Histogram) { func (it *listSeriesIterator) AtHistogram() (int64, histogram.Histogram) {
return 0, histogram.Histogram{} s := it.list[it.idx]
if s.h == nil {
return s.t, histogram.Histogram{}
}
return s.t, *s.h
} }
func (it *listSeriesIterator) ChunkEncoding() chunkenc.Encoding { func (it *listSeriesIterator) ChunkEncoding() chunkenc.Encoding {