Conversation
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.
Purpose
Rust currently has two complementary forms of FileIndex coverage:
read/write path.
However, there is no end-to-end test that opens a table written and committed
through Apache Paimon Java's normal table-writing path and then reads and queries
that table through Rust.
Without this coverage, the combined compatibility of the FileIndex payload,
DataFileMeta, manifest metadata, and embedded or sidecar index paths is notdirectly protected by a cross-language regression test.
This change adds reproducible Java-generated table fixtures and verifies that
Rust can load and use their FileIndexes through the normal scan and read path.
The coverage includes:
.indexsidecar storage.NULL, matching predicates, and non-matching predicates.This is test coverage only. It does not indicate a known interoperability bug
and does not add new index types or writing modes.
Brief change log
bitmap_embeddedbitmap_sidecarbloom_filter_embeddedbloom_filter_sidecarsnapshot, and manifest paths.
expected query results.
file-index.read.enabled=trueandfalse.NULLvalues.FileIOProviderobservation pattern to prove thatFileIndex can skip opening the Parquet data file.
storage-fsfeature andexclude Windows, consistently with existing filesystem fixture tests.
The fixtures were generated from Apache Paimon Java commit
1d368b4a5932f8221fd28e2555001abdb8fb12ee(2.2-SNAPSHOT).The fixture rows, in physical order, are:
(1, "keep")(1, "drop")(NULL, "null-id")(3, "three")The observable skip predicate is
id = 2. It lies inside the data file's[1, 3]min/max range, so manifest statistics retain the file. With FileIndexreads enabled, Rust returns an empty result without opening the Parquet file.
With FileIndex reads disabled, Rust opens the Parquet file and row-level
filtering produces the same empty result.
Tests
reads_java_written_file_indexes_and_prunes_data_files(
file_index_java_fixture_test.rs):id = 1returns both duplicate rows.id IS NULLreturns the null row.id = 1 AND payload = 'keep'retains row-level residualfiltering.
id = 2returns no rows with FileIndex reads both enabled anddisabled.
id = 2query.cargo test --locked -p paimon --test file_index_java_fixture_testcargo test --locked -p paimon --no-default-features --test file_index_java_fixture_test --no-runcargo clippy --locked -p paimon --test file_index_java_fixture_test -- -D warningscargo fmt --all -- --checkbash -n crates/paimon/testdata/file_index/regenerate.shgit diff --checkAPI and Format
No public API or persisted data format changes.
This change only adds cross-language compatibility fixtures, fixture-generation
support, and integration-test coverage. Production FileIndex readers, writers,
metadata handling, and path resolution are not modified.
The scope does not include:
Documentation
Add fixture documentation describing: