mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Expose ListPostings Length via Len() method (#15678)
tsdb: expose remaining ListPostings Length Signed-off-by: Ben Ye <benye@amazon.com> --------- Signed-off-by: Ben Ye <benye@amazon.com>
This commit is contained in:
parent
18bb8bf996
commit
919a5b657e
|
@ -863,6 +863,11 @@ func (it *ListPostings) Err() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Len returns the remaining number of postings in the list.
|
||||||
|
func (it *ListPostings) Len() int {
|
||||||
|
return len(it.list)
|
||||||
|
}
|
||||||
|
|
||||||
// bigEndianPostings implements the Postings interface over a byte stream of
|
// bigEndianPostings implements the Postings interface over a byte stream of
|
||||||
// big endian numbers.
|
// big endian numbers.
|
||||||
type bigEndianPostings struct {
|
type bigEndianPostings struct {
|
||||||
|
|
|
@ -1244,63 +1244,78 @@ func TestPostingsWithIndexHeap(t *testing.T) {
|
||||||
func TestListPostings(t *testing.T) {
|
func TestListPostings(t *testing.T) {
|
||||||
t.Run("empty list", func(t *testing.T) {
|
t.Run("empty list", func(t *testing.T) {
|
||||||
p := NewListPostings(nil)
|
p := NewListPostings(nil)
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.False(t, p.Seek(10))
|
require.False(t, p.Seek(10))
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("one posting", func(t *testing.T) {
|
t.Run("one posting", func(t *testing.T) {
|
||||||
t.Run("next", func(t *testing.T) {
|
t.Run("next", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10})
|
p := NewListPostings([]storage.SeriesRef{10})
|
||||||
|
require.Equal(t, 1, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Next())
|
require.True(t, p.Next())
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek less", func(t *testing.T) {
|
t.Run("seek less", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10})
|
p := NewListPostings([]storage.SeriesRef{10})
|
||||||
|
require.Equal(t, 1, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Seek(5))
|
require.True(t, p.Seek(5))
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.True(t, p.Seek(5))
|
require.True(t, p.Seek(5))
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek equal", func(t *testing.T) {
|
t.Run("seek equal", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10})
|
p := NewListPostings([]storage.SeriesRef{10})
|
||||||
|
require.Equal(t, 1, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Seek(10))
|
require.True(t, p.Seek(10))
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek more", func(t *testing.T) {
|
t.Run("seek more", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10})
|
p := NewListPostings([]storage.SeriesRef{10})
|
||||||
|
require.Equal(t, 1, p.(*ListPostings).Len())
|
||||||
require.False(t, p.Seek(15))
|
require.False(t, p.Seek(15))
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek after next", func(t *testing.T) {
|
t.Run("seek after next", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10})
|
p := NewListPostings([]storage.SeriesRef{10})
|
||||||
|
require.Equal(t, 1, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Next())
|
require.True(t, p.Next())
|
||||||
require.False(t, p.Seek(15))
|
require.False(t, p.Seek(15))
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("multiple postings", func(t *testing.T) {
|
t.Run("multiple postings", func(t *testing.T) {
|
||||||
t.Run("next", func(t *testing.T) {
|
t.Run("next", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10, 20})
|
p := NewListPostings([]storage.SeriesRef{10, 20})
|
||||||
|
require.Equal(t, 2, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Next())
|
require.True(t, p.Next())
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.True(t, p.Next())
|
require.True(t, p.Next())
|
||||||
require.Equal(t, storage.SeriesRef(20), p.At())
|
require.Equal(t, storage.SeriesRef(20), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek", func(t *testing.T) {
|
t.Run("seek", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10, 20})
|
p := NewListPostings([]storage.SeriesRef{10, 20})
|
||||||
|
require.Equal(t, 2, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Seek(5))
|
require.True(t, p.Seek(5))
|
||||||
require.Equal(t, storage.SeriesRef(10), p.At())
|
require.Equal(t, storage.SeriesRef(10), p.At())
|
||||||
require.True(t, p.Seek(5))
|
require.True(t, p.Seek(5))
|
||||||
|
@ -1315,23 +1330,30 @@ func TestListPostings(t *testing.T) {
|
||||||
require.Equal(t, storage.SeriesRef(20), p.At())
|
require.Equal(t, storage.SeriesRef(20), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
require.NoError(t, p.Err())
|
require.NoError(t, p.Err())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek lest than last", func(t *testing.T) {
|
t.Run("seek lest than last", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
||||||
|
require.Equal(t, 5, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Seek(45))
|
require.True(t, p.Seek(45))
|
||||||
require.Equal(t, storage.SeriesRef(50), p.At())
|
require.Equal(t, storage.SeriesRef(50), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek exactly last", func(t *testing.T) {
|
t.Run("seek exactly last", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
||||||
|
require.Equal(t, 5, p.(*ListPostings).Len())
|
||||||
require.True(t, p.Seek(50))
|
require.True(t, p.Seek(50))
|
||||||
require.Equal(t, storage.SeriesRef(50), p.At())
|
require.Equal(t, storage.SeriesRef(50), p.At())
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
t.Run("seek more than last", func(t *testing.T) {
|
t.Run("seek more than last", func(t *testing.T) {
|
||||||
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
p := NewListPostings([]storage.SeriesRef{10, 20, 30, 40, 50})
|
||||||
|
require.Equal(t, 5, p.(*ListPostings).Len())
|
||||||
require.False(t, p.Seek(60))
|
require.False(t, p.Seek(60))
|
||||||
require.False(t, p.Next())
|
require.False(t, p.Next())
|
||||||
|
require.Equal(t, 0, p.(*ListPostings).Len())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue