influxdata / influxdata/influxdb

"panic: length of stream not supported" with json.encode

Open
#20,928 2 comments 2 reactions 0 assignees View on GitHub
area/2.x area/flux panic
Dominant language
Rust
Stars
31.7k
Forks
3.7k
Avg merge
13h 37m
Merged PRs (30d)
8

Description

__Steps to reproduce:__
List the minimal actions needed to reproduce the behavior.

Run flux script like such:
```
import "http"
import "json"
data = from(bucket: "canopy")
|> range(start: -10s)
|> filter(fn: (r) => r["_measurement"] == "amqp_consumer")
|> filter(fn: (r) => r["host"] == "jetson1")
|> filter(fn: (r) => r["_field"] == "class_id")
|> map(fn: (r) => ({r with _value: 1.0 - r._value}))
|> mean()

http.post(url: "http://webapp:5000/allenbradley", headers: {}, data: json.encode(v: data[0]))

```

__Expected behavior:__
Successfully send the HTTP post request

__Actual behavior:__
Receive " An internal error has occurred" message in query window and the following message in influxdb logs:
```
ts=2021-03-11T19:59:42.883623Z lvl=info msg="panic during program start" log_id=0SpijqP0000 service=storage-reads error="panic: length of stream not supported" stacktrace="goroutine 135 [running]:\nruntime/debug.Stack(0xc0006e66c0, 0x0, 0x27794f1)\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x9f\ngithub.com/influxdata/influxdb/v2/query/control.(*Controller).executeQuery.func1(0xc00388cd80, 0xc0004f07e0)\n\t/go/src/github.com/influxdata/influxdb/query/control/controller.go:424 +0x153\npanic(0x22c6e20, 0x39b6980)\n\t/usr/local/go/src/runtime/panic.go:969 +0x1b9\ngithub.com/influxdata/flux.(*TableObject).Len(0xc000ef8300, 0x3a76e60)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/compile.go:192 +0x39\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doExpression(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a59980, 0xc000e32980, 0x3a6bca0, 0xc0039d4c00, 0x18, 0x24beb00, 0xc0039d4c00, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:361 +0x22da\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doArguments.func1(0xc004056a80, 0xc004056a80, 0x3a47be0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:734 +0x205\ngithub.com/influxdata/flux/values.BuildObjectWithSize(0x0, 0xc00192ca10, 0x1, 0x1, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/values/object.go:114 +0xcf\ngithub.com/influxdata/flux/values.BuildObject(...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/values/object.go:101\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doArguments(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc000e32a00, 0x3a6bca0, 0xc0039d4c00, 0xc0039d4c05, 0x3a1d420, 0xc0004ebba0, 0x0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:729 +0x185\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doCall(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc000120400, 0x3a6bca0, 0xc0039d4c00, 0x7f1035382b10, 0xc00177d680, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:661 +0x3a6\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doExpression(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a59680, 0xc000120400, 0x3a6bca0, 0xc0039d4c00, 0x7f1035382b10, 0xc00177d680, 0x0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:336 +0x1b7b\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doArguments.func1(0xc004056220, 0xc004056220, 0x2)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:734 +0x205\ngithub.com/influxdata/flux/values.BuildObjectWithSize(0x0, 0xc00192d210, 0x3, 0x3, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/values/object.go:114 +0xcf\ngithub.com/influxdata/flux/values.BuildObject(...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/values/object.go:101\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doArguments(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc000e32a80, 0x3a6bca0, 0xc0039d4c00, 0xc0039d4c05, 0x3a1d420, 0xc0004eb780, 0x0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:729 +0x185\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doCall(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc001642680, 0x3a6bca0, 0xc0039d4c00, 0xc000b49a10, 0x6, 0x0, 0x1)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:661 +0x3a6\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doExpression(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a59680, 0xc001642680, 0x3a6bca0, 0xc0039d4c00, 0xc000ef8300, 0x0, 0x0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:336 +0x1b7b\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doStatement(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a4eae0, 0xc000fa7950, 0x3a6bca0, 0xc0039d4c00, 0x3a71700, 0xc000ef8300, 0x0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:171 +0x448\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doFile(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc006ddf200, 0x3a6bca0, 0xc0039d4c00, 0x39f6860, 0xc000b49400, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:111 +0x1d4\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doPackage(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0xc0018d8770, 0x3a6bca0, 0xc0039d4c00, 0x39f6860, 0xc000b49400, 0xc003372158, 0x7f103ec38630)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:94 +0xc5\ngithub.com/influxdata/flux/interpreter.(*Interpreter).doRoot(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a47ea0, 0xc0018d8770, 0x3a6bca0, 0xc0039d4c00, 0x39f6860, 0xc000b49400, 0x2741f01, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:84 +0x255\ngithub.com/influxdata/flux/interpreter.(*Interpreter).Eval(0xc004732e80, 0x3a46ba0, 0xc000b2a840, 0x3a47ea0, 0xc0018d8770, 0x3a6bca0, 0xc0039d4c00, 0x39f6860, 0xc000b49400, 0x25341e0, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/interpreter/interpreter.go:75 +0x99\ngithub.com/influxdata/flux/runtime.(*runtime).Eval(0x6093820, 0x3a46ba0, 0xc000b2a840, 0x3a1d6e0, 0xc004fd4050, 0x3a1d6a0, 0x60cbf08, 0xc000b49340, 0x2, 0x2, ...)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/runtime/runtime.go:140 +0x226\ngithub.com/influxdata/flux/lang.(*AstProgram).getSpec(0xc000fa6410, 0x3a46ba0, 0xc000b2a7b0, 0xc000fa6500, 0x0, 0x0, 0x0, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/lang/compiler.go:440 +0x27f\ngithub.com/influxdata/flux/lang.(*AstProgram).Start(0xc000fa6410, 0x3a46ba0, 0xc000b2a6f0, 0xc000fa6500, 0x0, 0x0, 0x0, 0x0)\n\t/go/pkg/mod/github.com/influxdata/flux@v0.99.0/lang/compiler.go:477 +0x1c7\ngithub.com/influxdata/influxdb/v2/query/control.(*Controller).executeQuery(0xc0004f07e0, 0xc00388cd80)\n\t/go/src/github.com/influxdata/influxdb/query/control/controller.go:447 +0x12f\ngithub.com/influxdata/influxdb/v2/query/control.(*Controller).processQueryQueue(0xc0004f07e0)\n\t/go/src/github.com/influxdata/influxdb/query/control/controller.go:405 +0x4c\ngithub.com/influxdata/influxdb/v2/query/control.New.func1(0xc0004f07e0)\n\t/go/src/github.com/influxdata/influxdb/query/control/controller.go:208 +0x57\ncreated by github.com/influxdata/influxdb/v2/query/control.New\n\t/go/src/github.com/influxdata/influxdb/query/control/controller.go:206 +0x7ac\n"
```

__Environment info:__

Linux docker container, Influx 2.0

__Config:__
Copy any non-default config values here or attach the full config as a gist or file.

Contributor guide

Open the contributing guide

Research direction

The reproduction uses Flux's json.encode and http.post; the stack trace points to flux compile.go:192 and influxdb query/control/controller.go:424 and 447. Start by reproducing the script in the Linux Docker InfluxDB 2.0 environment, then trace the panic path. Done means the query no longer returns an internal error or panics and the HTTP POST succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, go, linux
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.