Repository navigation
perf(query): serialize compatible responses without per-row Value maps - #49
Merged
Merged
Conversation
VibeSWE
marked this pull request as ready for review
October 19, 2026 19:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Query responses currently encode Arrow batches, parse the JSON into per-row
Valuemaps, then serialize those maps again for HTTP. This change writes compatible responses directly to bytes, removing those intermediate maps and copies. Both ordinary JSON and NDJSON use the new path; the existing publicQueryResponse::to_json()remains unchanged.Flat rows use Arrow scalar encoders with serde conversion where needed to preserve floating-point and timestamp formatting. Schema guards retain the legacy path for incompatible cases. Missing fields, field order, null handling, escaping, error responses and NDJSON framing retain their existing behavior. Only
src/response.rsandsrc/handlers/http/query.rschange; dependencies, allocator, ingestion and query execution are unchanged.Validation
Tested head:
56790e6668b58295f005cc02eabdd069f3c30446, against main9747e2ba7a6dc18e2965b24fc84dd0632dadd87e.Evidence limits
Native server measurements used 4 CPU / 4 GiB diagnostic scopes on a shared host. They do not qualify maximum deployment capacity at 12 GiB, sustained ingestion throughput, or every query workload. The component fixtures use inferred Arrow types and one batch; allocation bytes are not RSS.
Earlier whole-request small-query CPU means and ingest RSS point estimates were adverse, so the original all-workload point gate remains recorded as NOT MET in the frozen campaign. Subsequent controlled memory and serializer experiments weaken attribution of those observations to this change; they do not identify every CPU burst or prove universal parity. The merge assessment rests on the combined evidence and source review, not on rewriting that historical verdict. Shared-library cache and host variation remain limitations. Future serde_json feature changes must continue to pass the exact-byte differential tests.
Graphs, raw-result summaries, regressions and follow-up diagnoses are in the Mayfly benchmark report. Local evidence is retained under
pr-qualification-20261019/{pr49-comparison-blocks,pr49-missing-output-paths,pr49-controlled-residency,pr49-small-serializer-isolation-v2,pr49-final-merge-review}in the existing experiment archive. Earlier failed attempts and historical overlay measurements remain preserved separately.Need help on this PR? Tag
@codesmith-botwith what you need.