GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — [adapters] Keep the JSON text of floats stable by swanandx · Pull Request #7735 · feldera/feldera

Conversation

@swanandx

@swanandx swanandx commented Oct 30, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

serde_json 1.0.149 and later write floats differently. Any update of serde_json brings this in.

serde_json 1.0.145 (main) 1.0.149+ 1.0.149+ with this PR
JSON output of 1e20 1e20 1e+20 1e20
Delete after resume from a checkpoint Correct Old row stays, plus a negative row Correct

TO_JSON text can be stored in pipeline state. If the text changes, a delete does not match the stored row. This PR writes floats with ryu, as earlier serde_json and CAST to VARCHAR do.

Describe Manual Test Plan

I measured both rows of the table on real pipelines. The new tests fail without this PR on serde_json 1.0.154.

Breaking Changes?

None.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@mythical-fred-oss

mythical-fred-oss Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

LGTM. Here is what I ran:

Check Result
cargo test -p feldera-types float_format, -p feldera-sqllib --lib variant (97 tests), -p static-connectors json_output_keeps_float_text, with the locked serde_json 1.0.145 pass
Same tests after cargo update -p serde_json --precise 1.0.149 pass
JsonSerializer reverted to serde_json::Serializer::new on 1.0.149 fails as it should ([1e+20,3.4e+38] vs [1e20,3.4e38])
pre-commit run --files <changed> pass

I also traced the paths. Row output for every JSON-encoded sink goes through seroutput::JsonSerializer. TO_JSON and VARIANT JsonString serialization go through Variant/FlatVariant::to_json_string. All of these now use the new formatter. ryu is already a workspace dependency and is licensed Apache-2.0/BSL-1.0 (Boost), so that's fine.

  • tech-debt (medium): Nothing stops new code from serializing SQL values with plain serde_json::to_string or Serializer::new, which would bring the checkpoint-divergence bug back after the iceberg bump. Consider a clippy.toml disallowed-methods entry for sqllib and static-connectors, or at least a note in the JsonFloatFormatter doc comment.
  • missing (low-medium): No end-to-end SQL test checks TO_JSON(CAST(1e20 AS DOUBLE)) or a DOUBLE/REAL column in JSON sink output. The current tests are unit-level only, and they only bite once serde_json reaches ≥1.0.149. They also don't cover -0.0 or a REAL value through JsonSerializer.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@swanandx
[adapters] Keep the JSON text of floats stable
6303596
serde_json 1.0.149 writes 1e20 as 1e+20. Write floats with ryu, as
earlier serde_json and CAST to VARCHAR do, in JSON output and TO_JSON.

Signed-off-by: Swanand Mulay <[email protected]>
@swanandx
swanandx force-pushed the json-float-ryu branch from f84a56a to 6303596 Compare October 30, 2026 11:34
@swanandx swanandx mentioned this pull request Oct 30, 2026
[connectors] Update iceberg-rust to 4dd8c946 #7721
Merged
@mythical-fred-oss

mythical-fred-oss Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

LGTM. Here is what I ran:

Check Result
cargo test -p feldera-types float_format, -p feldera-sqllib --lib variant::test, -p static-connectors json_output_keeps (lock at serde_json 1.0.145) pass
Same tests after a local cargo update -p serde_json to 1.0.154, which pulls in zmij (I restored the lockfile afterwards) pass, so the formatter does override the new float output
pre-commit run --files <changed> (clippy, fmt, machete, crypto check) pass
  • I looked for other places that write floats with plain serde_json into state or keys and found none outside tests. The JSON encoder's key path re-parses with arbitrary_precision, which keeps the original text. Number::from_f64 only shows up in tests.
  • The dependency is fine: ryu is Apache-2.0 OR BSL-1.0 (Boost) and was already a transitive dependency.
  • Missing (medium): no automated checkpoint→resume→delete test covers the failure the PR describes. The unit tests guard the text only, and the delete behaviour rests on the manual test. A TO_JSON(CAST(1e20 AS VARIANT)) row in a pipeline test that is deleted after a resume would lock it down.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@swanandx
swanandx requested review from blp and mihaibudiu and removed request for blp October 30, 2026 14:41
blp
blp approved these changes Oct 30, 2026
View reviewed changes

@blp blp left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like Fred's idea of adding a way to warn if the normal serde_json gets used (I haven't tried anything like that before though).

I hadn't known about serde_json::ser::Formatter. Good to know.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@swanandx
swanandx added this pull request to the merge queue Oct 30, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 30, 2026

Uh oh!

There was an error while loading. Please reload this page.

@mythical-fred-oss mythical-fred-oss Bot mentioned this pull request Oct 30, 2026
CI: Runtime Integration Tests fail with k8s ENHANCE_YOUR_CALM (ResourceExhausted) during pipeline ConfigMap creation #7465
Open
@mythical-fred-oss

mythical-fred-oss Bot commented Oct 30, 2026

Copy link
Copy Markdown
Contributor

Verdict: infrastructure, not this PR. Fairly confident.

The merge queue run's Runtime Integration Tests (gke-runners-amd64) job dropped the PR, but all 9 in-flight failures are unrelated tests (adhoc queries, adaptive joins, clock advance/timezone, checkpoint runtime upgrade, lateness) that failed at the same instant with the same error:

feldera.rest.errors.FelderaAPIError: FelderaError. Error message: upstream connect error or disconnect/reset before headers. reset reason: remote connection failure
Response Status: 503
  • Job: https://github.com/feldera/feldera/actions/runs/41137819254/job/124345935880
  • Tests started normally at 22:28:43, then every worker's request hung until 22:34:31 (~5:48 later) and all failed together — an ingress/control-plane connectivity blip on the shared amd64 test cluster, not something any test or the pipeline manager did.
  • This PR only touches crates/feldera-types, crates/sqllib, crates/static-connectors (stable JSON float formatting) — nothing related to pipeline provisioning or the test infra.

This is the same failure class as #7465 (two prior occurrences); I added this run as a third data point there.

Next step: re-queue — this should pass on a retry.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@mihaibudiu
mihaibudiu added this pull request to the merge queue Oct 30, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 31, 2026

Uh oh!

There was an error while loading. Please reload this page.

@mythical-fred-oss mythical-fred-oss Bot mentioned this pull request Oct 31, 2026
CI: gke-runners-amd64 runner shut down mid-job during Rust Unit Tests artifact download #7761
Open
@mythical-fred-oss

mythical-fred-oss Bot commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

Verdict: CI infrastructure failure, not this PR. Confident.

The only job GitHub reported as failure — Unit Tests / Rust Unit Tests (gke-runners-amd64, x86_64, x86_64-unknown-linux-gnu) — never reached any test. It was mid-download of build artifacts when the runner itself died:

##[error]The runner has received a shutdown signal. This can happen when the runner service is stopped, or a manually started runner is canceled.
  • Job: https://github.com/feldera/feldera/actions/runs/41181351431/job/124483863469 (log line 379)
  • Every other job in the run shows cancelled — collateral from this one dropping out, not independent failures.
  • This PR only touches crates/feldera-types, crates/sqllib, crates/static-connectors (stable JSON float formatting) — unrelated to runner infra or artifact download.

Filed #7761 to track the runner eviction.

Next step: re-queue — this should pass on a retry.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@swanandx
swanandx added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit dbb5357 Oct 31, 2026
1 check passed

Uh oh!

There was an error while loading. Please reload this page.

@swanandx
swanandx deleted the json-float-ryu branch October 31, 2026 15:46
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
7365f03
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its scans now also prune Parquet pages with the page index.
Nested columns in files without field ids now read as Spark reads them.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
7acb094
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown. A local
check of 22 snapshot filters, with LIKE, ranges, IN, NOT and OR, gave
the right rows.
Nested columns in files without field ids now read as Spark reads them.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
2ec81bd
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown. A local
check of 22 snapshot filters, with LIKE, ranges, IN, NOT and OR, gave
the right rows.
Nested columns in files without field ids now read as Spark reads them.
A new test reads a table made with add_files, and the changelog
notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
fb2aac7
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown. A local
check of 22 snapshot filters, with LIKE, ranges, IN, NOT and OR, gave
the right rows.
Nested columns in files without field ids now read their real values.
A new test reads a table made with add_files, and the changelog
notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
b1c10c7
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown. A local
check of 22 snapshot filters, with LIKE, ranges, IN, NOT and OR, gave
the right rows.
Nested columns in files without field ids now read their real values.
A new test reads a table made with add_files, and the changelog
notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
717ad65
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 8 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 2, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
d3f1a14
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 3, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
8ef5eae
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 3, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
14f9884
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.
serde_json now writes 1e40 as 1e+40 in parsed number text, so one
test error text changes.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 4, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
75d0c64
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.
serde_json now writes 1e40 as 1e+40 in parsed number text, so one
test error text changes.

Signed-off-by: Swanand Mulay <[email protected]>
swanandx added a commit that referenced this pull request Nov 4, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
9291b9f
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of #7735.
serde_json now writes 1e40 as 1e+40 in parsed number text, so one
test error text changes.

Signed-off-by: Swanand Mulay <[email protected]>
Karakatiza666 pushed a commit to AnnaZhand/feldera that referenced this pull request Nov 5, 2026
@swanandx
[connectors] Update iceberg-rust to 4dd8c946
4ebd9fa
The fork now matches upstream, which merged our reader stall fix.
The DataFusion integration crate is renamed back to iceberg-datafusion.
Its snapshot reads now run as a DataSource, prune Parquet pages with
the page index, and unescape LIKE prefixes before pushdown.
Nested columns in files without field ids now read their real values.
A new test reads such a table, with a page index, under 9 filters.
The changelog notes the change.
apache-avro 0.22 needs serde_json 1.0.150 or later. The JSON text of
floats does not change because of feldera#7735.
serde_json now writes 1e40 as 1e+40 in parsed number text, so one
test error text changes.

Signed-off-by: Swanand Mulay <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@blp blp blp approved these changes
@mihaibudiu mihaibudiu Awaiting requested review from mihaibudiu

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@swanandx @blp
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.