Refuse an /events aggregate that also asks for distinct_resources
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful

distinct_resources sends /events to openvoxdb's legacy compiler, which has no
function or group_by, so every backend failed and the client saw a generic 502
instead of the reason.

- Refuse an aggregate carrying a truthy distinct_resources with 400, before any fan-out
- Read the param the way openvoxdb does, so any capitalisation of "true" counts
- Leave non-aggregate distinct_resources queries and every other route alone
- Document the refusal
This commit is contained in:
2026-09-07 18:23:48 +10:00
parent c886617d72
commit 8baa511ef9
5 changed files with 193 additions and 1 deletions
+7
View File
@@ -160,6 +160,13 @@ paths add two more headers `pdbmux` sets itself, `X-Cache` and `Age` — see
- A `/reports` or `/events` query with no `function` column is a projection of
real records, not an aggregate, and stays on the union path — so an event
stored identically in two backends is still served once.
- `distinct_resources=true` on an `/events` `extract` with a `function` column
is refused with **400** naming the incompatibility, before any fan-out.
openvoxdb answers the distinct-resources form of `/events` from its legacy
compiler, which supports neither `function` nor `group_by`, so every backend
fails and the mistake would otherwise surface as a `502`. A
`distinct_resources` query with no `function` column is untouched and still
fans out; no other endpoint `pdbmux` combines honours the parameter.
- `include_total=true` on a combined endpoint reports the **merged** row count,
not the sum of the backends' `X-Records`, since shared keys collapse.