Repository navigation
Set version on main to 56.0.0-dev, document release versioning scheme - #26845
Conversation
…the version string The default created_by embeds the DataFusion version, so a longer version string (e.g. 56.0.0-dev) changes the size of every written parquet file, which shifts byte based metrics (scan_efficiency_ratio, file_groups byte ranges, file_size_bytes) in sqllogictest and datafusion-cli expectations. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 4ede8bd)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
939eead to
f98a6e4
Compare
…dent of the version string (apache#26892) ## Which issue does this PR close? - Part of apache#24461 - Split out from apache#26845 ## Rationale for this change While testing a `56.0.0-dev` version on `main` in apache#26845, CI failed because the default `datafusion.execution.parquet.created_by` value (`datafusion version 55.1.0`) is written into every Parquet file, so changing the version string changes the size of every Parquet file written during tests. Since this happens any time the version string changes, let's just hard code it into the tests that don't matter ## What changes are included in this PR? Hard code a version in tests that don't need it ## What is the testing strategy for this PR? Existing CI. ## Are there any user-facing changes? No, test only. --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
| 08)----------FilterExec: n@0 < 5, metrics=[] | ||
| 09)------------WorkTableExec: name=w, metrics=[] | ||
| 10)--------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/cte/hash_join_dynamic_filter.parquet]]}, projection=[k], output_ordering=[k@0 ASC NULLS LAST], file_type=parquet, predicate=DynamicFilter [ true ], dynamic_rg_pruning=eligible, metrics=[output_rows=4, output_batches=4, files_ranges_pruned_statistics=4 total → 4 matched, row_groups_pruned_statistics=4 total → 4 matched, page_index_pages_pruned=4 total → 4 matched, page_index_rows_pruned=400 total → 400 matched, limit_pruned_row_groups=0 total → 0 matched, batches_split=0, file_open_errors=0, file_scan_errors=0, files_opened=4, files_processed=4, num_predicate_creation_errors=0, predicate_evaluation_errors=0, pushdown_rows_matched=4, pushdown_rows_pruned=396, predicate_cache_inner_records=400, predicate_cache_records=4, scan_efficiency_ratio=157.36% (1.14 K/727)] | ||
| 10)--------DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/cte/hash_join_dynamic_filter.parquet]]}, projection=[k], output_ordering=[k@0 ASC NULLS LAST], file_type=parquet, predicate=DynamicFilter [ true ], dynamic_rg_pruning=eligible, metrics=[output_rows=4, output_batches=4, files_ranges_pruned_statistics=4 total → 4 matched, row_groups_pruned_statistics=4 total → 4 matched, page_index_pages_pruned=4 total → 4 matched, page_index_rows_pruned=400 total → 400 matched, limit_pruned_row_groups=0 total → 0 matched, batches_split=0, file_open_errors=0, file_scan_errors=0, files_opened=4, files_processed=4, num_predicate_creation_errors=0, predicate_evaluation_errors=0, pushdown_rows_matched=4, pushdown_rows_pruned=396, predicate_cache_inner_records=400, predicate_cache_records=4, scan_efficiency_ratio=160.67% (1.14 K/712)] |
There was a problem hiding this comment.
percentage difference is due to updatings to the version
| | datafusion.execution.parquet.statistics_enabled | page | (writing) Sets if statistics are enabled for any column Valid values are: "none", "chunk", and "page" These values are not case sensitive. If NULL, uses default parquet writer setting | | ||
| | datafusion.execution.parquet.max_row_group_size | 1048576 | (writing) Target maximum number of rows in each row group (defaults to 1M rows). Writing larger row groups requires more memory to write, but can get better compression and be faster to read. When `max_row_group_bytes` is also set, the writer flushes a row group when either limit is reached, whichever comes first. | | ||
| | datafusion.execution.parquet.max_row_group_bytes | NULL | (writing) Target maximum size of each row group in bytes. When set, the writer flushes whenever either this limit or `max_row_group_size` is reached, whichever comes first. Useful for bounding writer memory on wide schemas where a row-count limit can map to very different byte sizes. Matches the behavior of `parquet.block.size` in parquet-mr. If `None` (the default), only the row-count limit applies. Currently only honored when `allow_single_file_parallelism` is `false`; by default the parallel file writer ignores this limit. | | ||
| | datafusion.execution.parquet.created_by | datafusion version 56.0.0-dev | (writing) Sets "created by" property | |
There was a problem hiding this comment.
If you look at this diff with whitespace blind: https://github.com/apache/datafusion/pull/26845/changes?w=1
It only changes the created_by field, everything else is whitespace diffs
| ### 11. Sync Changelog and Version to main | ||
| ### 12. Sync Changelog and Documentation to main | ||
|
|
||
| The crate version is **not** synced back to `main`: `main` already carries the |
There was a problem hiding this comment.
FYI @xudong963 -- here is a proposal for how to do versions after the next release
nuno-faria
left a comment
There was a problem hiding this comment.
Thanks @alamb. I left some minor nits below.
| ```shell | ||
| python3 dev/update_datafusion_versions.py 57.0.0-dev | ||
| cargo update --workspace # updates Cargo.lock | ||
| ./dev/update_config_docs.sh # regenerates docs/source/user-guide/configs.md |
There was a problem hiding this comment.
I guess the update config docs is to update the formatting? I think we could also just run prettier to be faster.
There was a problem hiding this comment.
Makes sense -- updated.
| ```shell | ||
| sed -i '' 's/55\.1\.0/56.0.0/' docs/source/download.md docs/source/user-guide/{crate-configuration,example-usage}.md | ||
| ``` |
There was a problem hiding this comment.
What if the update versions script had a flag to just update the user facing ones?
There was a problem hiding this comment.
like add a --user-facing-docs-only mode
There was a problem hiding this comment.
What if the update versions script had a flag to just update the user facing ones?
The sed -i '' form in this step is BSD (macOS) syntax. GNU sed takes the backup suffix only when it's attached to -i, so on Linux the '' becomes the script and s/55\.1\.0/56.0.0/ is read as a file name. A docs-only mode in update_datafusion_versions.py would avoid that as well as the hand-maintained file list.
There was a problem hiding this comment.
ok, I had claude whip it up
mbutrovich
left a comment
There was a problem hiding this comment.
Thanks @alamb! Just a minor docs request for anyone trying to use main as a dependency.
| rust-version = "1.95.0" | ||
| # Define DataFusion version | ||
| version = "55.1.0" | ||
| version = "56.0.0-dev" |
There was a problem hiding this comment.
Should we add a sentence to the Using the nightly DataFusion builds section about how to depend on main now that it's a pre-release? A git dependency with no version still resolves. A requirement like version = "56" next to the git source, or a [patch.crates-io] entry used with a "56" requirement, no longer matches, because Cargo only matches a pre-release when the requirement names one:
error: failed to select a version for the requirement `a = "^56"`
candidate versions found which didn't match: 56.0.0-dev
help: if you are looking for the prerelease package it needs to be specified explicitly
a = { version = "56.0.0-dev" }
Downstream projects that test against main will hit this the first time they bump, so one line saying to use version = "57.0.0-dev" (or leave the version off) would save them the search.
# Conflicts: # docs/source/user-guide/configs.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks. Let's give it a try@ |
Which issue does this PR close?
56.0.0(Oct/Nov 2026) #24461Rationale for this change
As discussed on #24461, it is currently hard to tell what version of DataFusion a build came from:
mainreports the previous release version (55.1.0) even though it contains unreleased code destined for56.0.0.This PR changes the version on
mainto56.0.0-dev(the semver pre-release form of the upcoming release). The benefits are:-devversions can never be accidentally published to crates.io as if they were a releaseWhat changes are included in this PR?
Details
- Bump the workspace version in `Cargo.toml` / `Cargo.lock` to `56.0.0-dev` - Regenerate `docs/source/user-guide/configs.md` (the default of `datafusion.execution.parquet.created_by` includes the version) - Update `dev/release/README.md` with the new versioning scheme: a new "Version Numbers" section, a new step "1b. Bump Version on main" describing the version bump PR, updated step 2 examples, and step 11 ("Sync Changelog and Documentation to main") no longer syncs the release version back to `main`, only the changelog and the user facing crate examples - Update `docs/source/contributor-guide/release_management.md` to describe the `-dev` convention - Update `dev/update_datafusion_versions.py` so that it: - Sets the release labeler target to the version without the `-dev` suffix (e.g. `56.0.0-dev` -> `v56.0.0`) rather than `major + 1` - Skips updating the user facing `Cargo.toml` examples (e.g. `docs/source/download.md`) for `-dev` versions, since those are never published to crates.ioNotes:
What is the testing strategy for this PR?
Are there any user-facing changes?
Builds from
mainnow report version56.0.0-devinstead of55.1.0. The release process documentation is updated.