mirror of
https://github.com/SigNoz/signoz.git
synced 2026-09-06 19:40:41 +01:00
#### Description **What was broken:** on a stack using the new JSON log body, any query asking for a **table** (`scalar`) or a **graph** (`time_series`) failed with HTTP 500 if the result contained a JSON column. The logs list view worked fine, which is why this went unnoticed. The smallest way to hit it is a raw ClickHouse panel running `select * from signoz_logs.logs_v2`. **Why it happened:** we ask ClickHouse to send JSON columns as plain text, but the driver reports that such a column needs a different Go type — so the reader prepared the wrong kind of container and the read failed. The driver only reports the correct type *after* the first row has been read, which is too late for code that sets up its containers up front. The original JSON work patched around this inside the logs-list reader only; the connection setting that causes it is global, so the other two readers stayed broken. **The fix:** correct the reported type once, at the connection that sets that option, so every reader gets a container that works and receives a normal map. Concretely: - `pkg/querier` no longer needs its own workaround — the three readers are back to ordinary code. - The older v3/v4 read paths had the same bug and are fixed without any changes of their own. - A JSON path value such as `body_v2.level` now comes back as `"error"` or `7` instead of a driver wrapper object. - Grouping a graph by the whole JSON body used to collapse every group into a single unlabelled line; each document now labels its own series. #### Issues closed by this PR Fixes https://github.com/SigNoz/engineering-pod/issues/5911 #### Additional Information Verified end to end against a local stack with 1,000,000 log rows and 200,002 distinct `trace_id`s: | query | before | after | | --- | --- | --- | | table query over a JSON column | 500 | 200, body returned as an object | | graph grouped by the JSON body | 500 | 200, 22 series, one per document | | graph grouped by `trace_id` (200k groups) | 200 | 200, unchanged | A follow-up PR stacked on this one reworks how the graph reader classifies columns — fixing boolean and small-integer columns in raw SQL panels and cutting the reader's allocations. Known gaps, unchanged from `main` and out of scope here: - Waterfall and flamegraph read rows into structs, which this fix does not cover. Moving span attributes to JSON will need the same type on those fields, and one helper there fails silently rather than erroring. - Dashboard variable queries no longer crash on a JSON column but still reject it as an unsupported value type. - A `Map(String, JSON)` column **panics inside the driver**, which can take the process down. Confirmed still unfixed on `clickhouse-go` main, and not yet reported upstream.