refactor(tsdb): remove read from unexported field (#17279)

* refactor(tsdb): remove read from unexported field

* fix(tsdb): add regression test to check for panic

* fix(tsdb): detect nil without panic
pull/17300/head
Jacob Marble 2020-03-16 14:26:14 -07:00 committed by GitHub
parent 952d7d7528
commit 0ec2b453b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 1 deletions

View File

@ -30,7 +30,7 @@ type seriesIDSetIterator struct {
}
func NewSeriesIDSetIterator(ss *SeriesIDSet) SeriesIDSetIterator {
if ss == nil || ss.bitmap == nil {
if ss == nil || ss.IsEmpty() {
return nil
}
return &seriesIDSetIterator{ss: ss, itr: ss.Iterator()}

View File

@ -18,6 +18,7 @@ import (
"github.com/influxdata/influxdb/tsdb/seriesfile"
"github.com/influxdata/influxdb/tsdb/tsi1"
"github.com/influxdata/influxql"
"github.com/stretchr/testify/assert"
)
func toSeriesIDs(ids []uint64) []tsdb.SeriesID {
@ -355,3 +356,25 @@ func BenchmarkIndex_ConcurrentWriteQuery(b *testing.B) {
})
}
}
func TestSeriesIDSet_isEmpty(t *testing.T) {
sis := tsdb.NewSeriesIDSet(tsdb.NewSeriesID(1))
assert.False(t, sis.IsEmpty())
sis = tsdb.NewSeriesIDSet()
assert.True(t, sis.IsEmpty())
sis = &tsdb.SeriesIDSet{} // sis.bitmap == nil
assert.True(t, sis.IsEmpty())
}
func TestNewSeriesIDSetIterator(t *testing.T) {
sisi := tsdb.NewSeriesIDSetIterator(tsdb.NewSeriesIDSet(tsdb.NewSeriesID(1)))
assert.NotNil(t, sisi)
sisi = tsdb.NewSeriesIDSetIterator(tsdb.NewSeriesIDSet())
assert.Nil(t, sisi)
sisi = tsdb.NewSeriesIDSetIterator(nil)
assert.Nil(t, sisi)
}

View File

@ -48,6 +48,10 @@ func (s *SeriesIDSet) Bytes() int {
return b
}
func (s *SeriesIDSet) IsEmpty() bool {
return s == nil || s.bitmap == nil || s.bitmap.IsEmpty()
}
// Add adds the series id to the set.
func (s *SeriesIDSet) Add(id SeriesID) {
s.Lock()