influxdata / influxdata/influxdb

Panic when executing query that uses regular expressions to match measurements

Open
#22,857 4 comments 2 reactions 0 assignees View on GitHub
panic
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.