influxdata / influxdata/kapacitor

Panic when invoking function without parentheses

Open
#2,190 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
2.4k
Forks
479
Avg merge
4d 16h
Merged PRs (30d)
4

Description

Found on Kapacitor 1.5.2.

A panic occurs when the `align` function is missing parentheses.

Trying to add this task template:
```
dbrp "telegraf"."two_days"

// Template parameters
var measurement string

var qy = 'select mean(*) from "telegraf"."two_days"."' + measurement + '"'

var agg_1m = batch
|query(qy)
.groupByMeasurement()
.groupBy(*)
.period(1m)
.every(1m)
.align

agg_1m
|influxDBOut()
.database('telegraf')
.retentionPolicy('fred')
.measurement(measurement)
```
kapacitor define template t -tick ./...
This panic and stack results:
```
panic serving 127.0.0.1:46056: reflect: call of reflect.Value.Interface on zero Value
goroutine 28299 [running]:
net/http.(*conn).serve.func1(0xc0001fafa0)
/usr/local/go/src/net/http/server.go:1746 +0xd0
panic(0x1eb3e00, 0xc0007a36a0)
/usr/local/go/src/runtime/panic.go:513 +0x1b9
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.Evaluate.func1(0xc0004da140)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:58 +0x217
panic(0x1eb3e00, 0xc0007a36a0)
/usr/local/go/src/runtime/panic.go:513 +0x1b9
reflect.valueInterface(0x0, 0x0, 0x0, 0x1, 0x1, 0xc001022150)
/usr/local/go/src/reflect/value.go:983 +0x1a0
reflect.Value.Interface(0x0, 0x0, 0x0, 0x5, 0x3f13960)
/usr/local/go/src/reflect/value.go:978 +0x44
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.(*ReflectionDescriber).Property(0xc03c1ca8a0, 0xc000026106, 0x5, 0xc03c1ca801, 0x0)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:815 +0x7a
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.evalChain(0x24f1ae0, 0xc01f2fa0f0, 0xc0007ae6c0, 0xc001118fa0, 0x0, 0xc04040afc0)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:452 +0x241
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.eval(0x250fb20, 0xc01f2fa0f0, 0xc0007ae6c0, 0xc001118fa0, 0x0, 0xc04040afc0, 0x1, 0x0, 0x0)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:181 +0xdad
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.eval(0x250fc40, 0xc035be6640, 0xc0007ae6c0, 0xc001118fa0, 0x0, 0xc04040afc0, 0x1, 0x0, 0x0)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:164 +0x1903
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.eval(0x250fee0, 0xc04040acc0, 0xc0007ae6c0, 0xc001118fa0, 0x0, 0xc04040afc0, 0x1, 0xc0004da130, 0x0)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:216 +0x1517
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick.Evaluate(0xc000026000, 0x17b, 0xc0007ae6c0, 0x0, 0xc000015001, 0x0, 0x3f12708, 0xc0000a9860)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/tick/eval.go:72 +0x16d
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/pipeline.createPipelineAndVars(0xc000026000, 0x17b, 0x2, 0xc0007ae6c0, 0x2501da0, 0xc000318640, 0x0, 0xc000517101, 0xc000517108, 0x40c448, ...)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/pipeline/pipeline.go:94 +0x1c0
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/pipeline.CreateTemplatePipeline(0xc000026000, 0x17b, 0x2, 0xc0007ae6c0, 0x2501da0, 0xc000318640, 0xc0003a82d0, 0x227b0f1, 0x4)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/pipeline/pipeline.go:29 +0x81
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor.(*TaskMaster).NewTemplate(0xc000104580, 0xc0007620c0, 0xd, 0xc000026000, 0x17b, 0x1, 0x0, 0xc0000260a5, 0xc000384e60)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/task_master.go:375 +0xbe
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/services/task_store.(*Service).templateTask(0xc0005fe0a0, 0xc0007620c0, 0xd, 0x1, 0xc000026000, 0x17b, 0x0, 0x0, 0x0, 0x0, ...)
/root/go/src/github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/services/task_store/service.go:1979 +0x99
github.com/influxdata/fermium/vendor/github.com/influxdata/kapacitor/services/task_store.(*Service).handleCreateTemplate(0xc0005fe0a0, 0x24f9ce0, 0xc0007ae5c0, 0xc001588900)
```

Contributor guide

Open the contributing guide

Research direction

Start with tick/eval.go, following Evaluate through evalChain and ReflectionDescriber.Property, then reproduce the missing-parentheses template with the kapacitor define template command. Done means the invalid align invocation is handled without a server panic and produces an appropriate error; add coverage where the evaluator tests are located.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
backend
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.