influxdata / influxdb

Scalable datastore for metrics, events, and real-time analytics
https://influxdata.com
Apache License 2.0
29.08k stars 3.56k forks source link

panic: interface conversion: tsm1.Value #24155

Open Subnum12 opened 1 year ago

Subnum12 commented 1 year ago

It looks like same issue as #8085

You not prevent two different field types for the same measurement.

service=storage-reads error="panic: interface conversion: tsm1.Value is tsm1.FloatValue, not tsm1.StringValue" stacktrace="goroutine 9515 [running]:
runtime/debug.Stack()
    /go/src/runtime/debug/stack.go:24 +0x68
github.com/influxdata/flux/execute.(*executionState).recover(0x40022099e0)
    /go/pkg/mod/github.com/influxdata/flux@v0.191.0/execute/recover.go:32 +0x1e0
panic({0x7f9d6e7e80, 0x40054d6c60})
    /go/src/runtime/panic.go:838 +0x204
github.com/influxdata/influxdb/v2/tsdb/engine/tsm1.(*stringArrayAscendingCursor).Next(0x4004c60730)
    /root/project/tsdb/engine/tsm1/array_cursor.gen.go:977 +0x6e0
github.com/influxdata/influxdb/v2/storage/reads.(*stringMultiShardArrayCursor).Next(0x40006a53c8)
    /root/project/storage/reads/array_cursor.gen.go:2942 +0x3c
github.com/influxdata/influxdb/v2/storage/flux.(*stringTable).advance(0x4002703340)
    /root/project/storage/flux/table.gen.go:3034 +0x34
github.com/influxdata/influxdb/v2/storage/flux.(*table).init(...)
    /root/project/storage/flux/table.go:74
github.com/influxdata/influxdb/v2/storage/flux.newStringTable(0x400286f440, {0x7f640d4908?, 0x40006a53c8}, {0x5?, 0x8?}, {0x7f9da9fea8, 0x4004c608c0}, {0x4003852090, 0x6, 0x6}, ...)
    /root/project/storage/flux/table.gen.go:3001 +0x250
github.com/influxdata/influxdb/v2/storage/flux.(*filterIterator).handleRead(0x4002b72fc0, 0x40018764c0, {0x7f9da94a10, 0x40021e4d00})
    /root/project/storage/flux/reader.go:221 +0x544
github.com/influxdata/influxdb/v2/storage/flux.(*filterIterator).Do(0x4002b72fc0, 0x7f9d935ac0?)
    /root/project/storage/flux/reader.go:174 +0x130
github.com/influxdata/influxdb/v2/query/stdlib/influxdata/influxdb.(*Source).processTables(0x400492a780, {0x7f9da88858?, 0x40054d6360}, {0x7f9da7c0c0, 0x4002b72fc0}, 0x174fa2054d6dc738?)
    /root/project/query/stdlib/influxdata/influxdb/source.go:69 +0xb8
github.com/influxdata/influxdb/v2/query/stdlib/influxdata/influxdb.(*readFilterSource).run(0x400492a780, {0x7f9da88858, 0x40054d6360})
    /root/project/query/stdlib/influxdata/influxdb/source.go:146 +0xb8
github.com/influxdata/influxdb/v2/query/stdlib/influxdata/influxdb.(*Source).Run(0x400492a780, {0x7f9da88858, 0x40054d6360})
    /root/project/query/stdlib/influxdata/influxdb/source.go:50 +0x7c
github.com/influxdata/flux/execute.(*executionState).do.func2({0x7f9da8a7d8?, 0x400492a780})
    /go/pkg/mod/github.com/influxdata/flux@v0.191.0/execute/executor.go:535 +0x310
created by github.com/influxdata/flux/execute.(*executionState).do
    /go/pkg/mod/github.com/influxdata/flux@v0.191.0/execute/executor.go:515 +0x398

Linux 6.1.19-v8+ aarch64 InfluxDB v2.6.1 (git: 9dcf880fe0) build_date: 2022-12-29T15:52:06Z

jeffreyssmith2nd commented 1 year ago

Hey @Subnum12, this is a very rare edge case that we are still trying to solve. To recover your data, you can use influxd inspect check-schema to determine where the conflicts lie. You can then export those shards to lp, remove the offending fields from the lp, delete the shards and reimport the lp.