influxdata / influxdata/influxdb
Panic when executing query that uses regular expressions to match measurements
- Dominant language
- Rust
- Stars
- 31.7k
- Forks
- 3.7k
- Avg merge
- 13h 37m
- Merged PRs (30d)
- 8
Description
InfluxDB: OSS 1.8.9
A community member [has reported](https://influxcommunity.slack.com/archives/CH6GVB9NC/p1635888885141900) an error when executing queries that contain regular expressions and has provided the following call stack:
```
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x963de0]
goroutine 48889834 [running]:
github.com/influxdata/influxdb/query.Iterators.Close(0xc721afc480, 0xb, 0x24, 0xc48fb98a50, 0x25b6ea0)
/go/src/github.com/influxdata/influxdb/query/iterator.go:48 +0x50
github.com/influxdata/influxdb/coordinator.(*LocalShardMapping).CreateIterator(0xc502847880, 0x25a5300, 0xc491cb2960, 0xc48fb98a50, 0x259a240, 0xc491cb2a80, 0x0, 0x0, 0x0, 0x0, ...)
/go/src/github.com/influxdata/influxdb/coordinator/shard_mapper.go:202 +0x33a
github.com/influxdata/influxdb/query.(*exprIteratorBuilder).callIterator.func1(0xc4b81458f0, 0x25a5300, 0xc491cb2960, 0xc4b8143be0, 0xc4b8143b98, 0xc491cb2a80, 0x430042ff42fb42f8, 0x4308430743044303)
/go/src/github.com/influxdata/influxdb/query/select.go:583 +0x15e
github.com/influxdata/influxdb/query.(*exprIteratorBuilder).callIterator(0xc48623f8f0, 0x25a5300, 0xc491cb2960, 0xc491cb2a80, 0x259a240, 0xc491cb2a80, 0x0, 0x0, 0x0, 0x0, ...)
/go/src/github.com/influxdata/influxdb/query/select.go:608 +0xdf
github.com/influxdata/influxdb/query.(*exprIteratorBuilder).buildCallIterator.func1(0xc491cb2a80, 0x25a5300, 0xc491cb2960, 0xc48623f8f0, 0xc48623edd0, 0x259a340, 0xc491e26050, 0x8, 0x7fdc3f3e8b28)
/go/src/github.com/influxdata/influxdb/query/select.go:515 +0xf5
github.com/influxdata/influxdb/query.(*exprIteratorBuilder).buildCallIterator(0xc4b81458f0, 0x25a5300, 0xc491cb2960, 0xc491cb2a80, 0x4b, 0xc00ca44e60, 0x52, 0xa0)
/go/src/github.com/influxdata/influxdb/query/select.go:559 +0xd3e
github.com/influxdata/influxdb/query.buildExprIterator(0x25a5300, 0xc491cb2960, 0x259a240, 0xc491cb2a80, 0x7f9c289d8c48, 0xc502847880, 0xc48fbe7910, 0x1, 0x1, 0x259a240, ...)
/go/src/github.com/influxdata/influxdb/query/select.go:156 +0x1f4
github.com/influxdata/influxdb/query.buildFieldIterator(0x25a5300, 0xc491cb2960, 0x259a240, 0xc491cb2a80, 0x7f9c289d8c48, 0xc502847880, 0xc48fbe7910, 0x1, 0x1, 0x0, ...)
/go/src/github.com/influxdata/influxdb/query/select.go:870 +0x489
github.com/influxdata/influxdb/query.buildCursor.func1(0xc422738f68, 0x7f9c9ef8a201)
/go/src/github.com/influxdata/influxdb/query/select.go:744 +0x127
github.com/influxdata/influxdb/vendor/golang.org/x/sync/errgroup.(*Group).Go.func1(0xc491cb2ab0, 0xc4728c3a40)
/go/src/github.com/influxdata/influxdb/vendor/golang.org/x/sync/errgroup/errgroup.go:57 +0x64
created by github.com/influxdata/influxdb/vendor/golang.org/x/sync/errgroup.(*Group).Go
/go/src/github.com/influxdata/influxdb/vendor/golang.org/x/sync/errgroup/errgroup.go:54 +0x66
```
The `nil` pointer dereference occurs here:
https://github.com/influxdata/influxdb/blob/d9b56321d5796d7791138ed6a8f0a6ae6007a551/query/iterator.go#L48
as a result of an error being raised here:
https://github.com/influxdata/influxdb/blob/d9b56321d5796d7791138ed6a8f0a6ae6007a551/coordinator/shard_mapper.go#L188-L204
suggesting that prior to the error occurring, a `nil` iterator was added to the `inputs` slice:
https://github.com/influxdata/influxdb/blob/d9b56321d5796d7791138ed6a8f0a6ae6007a551/coordinator/shard_mapper.go#L194
It appears that calling `filterNonNil` is a common pattern for eliminating `nil` iterators, prior to performing subsequent operations:
https://github.com/influxdata/influxdb/blob/d9b56321d5796d7791138ed6a8f0a6ae6007a551/query/iterator.go#L53-L54
Contributor guide
Research direction
Start with query/iterator.go at the panic location and coordinator/shard_mapper.go around lines 188-204, then trace the regular-expression measurement query through query/select.go. Reproduce the reported query and verify that an iterator error no longer causes a nil-pointer panic during cleanup.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100