feat: Introduce Deduplicator trait to unify mutable and immutable deduplication - #1537
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1537 +/- ##
=======================================
Coverage 84.16% 84.16%
=======================================
Files 121 122 +1
Lines 34131 34108 -23
Branches 34131 34108 -23
=======================================
- Hits 28726 28707 -19
+ Misses 4017 4013 -4
Partials 1388 1388 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
| // These index positions correspond to the order of columns defined in | ||
| // `selected_column_names_and_types()` | ||
| const ADD_PATH_INDEX: usize = 0; // Position of "add.path" in getters | ||
| const ADD_PARTITION_VALUES_INDEX: usize = 1; // Position of "add.partitionValues" in getters | ||
| const ADD_DV_START_INDEX: usize = 2; // Start position of add deletion vector columns | ||
| const BASE_ROW_ID_INDEX: usize = 5; // Position of add.baseRowId in getters | ||
| const REMOVE_PATH_INDEX: usize = 6; // Position of "remove.path" in getters | ||
| const REMOVE_DV_START_INDEX: usize = 7; // Start position of remove deletion vector columns |
There was a problem hiding this comment.
Note: these are moved out because (annoyingly), rust expects a proper type AddRemoveDedupVisitor::<FileActionDeduplicator>::ADD_PATH_INDEX
| } | ||
| } | ||
|
|
||
| impl<'seen> Deduplicator for FileActionDeduplicator<'seen> { |
There was a problem hiding this comment.
NOTE: this just moves it to the Deduplicator impl block.
There was a problem hiding this comment.
Is the named lifetime actually used inside the impl block (guessing not, because trait impl)?
If not, can use anonymous lifetime here?
| const ADD_PATH_INDEX: usize = 0; // Position of "add.path" in getters | ||
| const ADD_PARTITION_VALUES_INDEX: usize = 1; // Position of "add.partitionValues" in getters | ||
| const ADD_DV_START_INDEX: usize = 2; // Start position of add deletion vector columns | ||
| const BASE_ROW_ID_INDEX: usize = 5; // Position of add.baseRowId in getters | ||
| const REMOVE_PATH_INDEX: usize = 6; // Position of "remove.path" in getters | ||
| const REMOVE_DV_START_INDEX: usize = 7; // Start position of remove deletion vector columns |
There was a problem hiding this comment.
Note: these are moved here because (annoyingly), rust expects a proper type AddRemoveDedupVisitor::::ADD_PATH_INDEX
| /// - `Ok(None)`: When no file action is found | ||
| /// - `Err(...)`: On any error during extraction | ||
| pub(crate) fn extract_file_action<'a>( | ||
| fn extract_file_action<'a>( |
There was a problem hiding this comment.
Here because of unnecessary visibility specifiers from trait Deduplicator.
| //! actions selected | ||
| //! | ||
| use crate::engine_data::{FilteredEngineData, GetData, RowVisitor, TypedGetData as _}; | ||
| use crate::log_replay::deduplicator::Deduplicator; |
There was a problem hiding this comment.
imported to have access to the trait's check_record_and_seen
There was a problem hiding this comment.
as _ can be used to clearly state that
433c0aa to
36651ea
Compare
36651ea to
8c284ae
Compare
| /// - `dv_start_index` retrieves the storage type (`deletionVector.storageType`). | ||
| /// - `dv_start_index + 1` retrieves the path or inline deletion vector (`deletionVector.pathOrInlineDv`). | ||
| /// - `dv_start_index + 2` retrieves the optional offset (`deletionVector.offset`). | ||
| fn extract_dv_unique_id<'a>( |
There was a problem hiding this comment.
Moved this directly from FileActionDeduplicator.
d71a38d to
9312426
Compare
|
|
||
| pub(crate) trait Deduplicator { | ||
| /// Key type for identifying file actions. | ||
| type Key; |
There was a problem hiding this comment.
Does the key actually change? The trait name sounds generic enough, but then methods like extract_file_action sound quite specific to file actions and scan replay?
There was a problem hiding this comment.
True. I'd initially wanted to use Deduplicator::Key to allow CheckpointDeduplicator use String. But String ended up complex enough to just keep it as FileActionKey.
I'll change to make the type fixed.
| fn check_and_record_seen(&mut self, key: Self::Key) -> bool; | ||
|
|
||
| /// Returns `true` for commit log batches (updates hashmap), `false` for checkpoints (read-only). | ||
| fn is_log_batch(&self) -> bool; |
There was a problem hiding this comment.
Should this be an associated constant? If we're ever doing checkpoint replay, we should be using a read-only deduplicator.
Tho that begs the question -- who actually cares (outside the trait impl itself) whether a given batch is from a commit or checkpoint? Is this all a vestige of the original code warts the Deduplicator trait tries to fix?
There was a problem hiding this comment.
Yep this is still used a few places in AddRemoveDedupVisitor that uses is_log_batch, so it's vestigial until we move over the code in scan_metadata.
| match getters[dv_start_index].get_opt(i, "deletionVector.storageType")? { | ||
| Some(storage_type) => { | ||
| let path_or_inline = | ||
| getters[dv_start_index + 1].get(i, "deletionVector.pathOrInlineDv")?; | ||
| let offset = getters[dv_start_index + 2].get_opt(i, "deletionVector.offset")?; | ||
|
|
||
| Ok(Some(DeletionVectorDescriptor::unique_id_from_parts( | ||
| storage_type, | ||
| path_or_inline, | ||
| offset, | ||
| ))) | ||
| } | ||
| None => Ok(None), | ||
| } |
There was a problem hiding this comment.
let Some(storage_type) = getters... else {
return Ok(None);
};
let path_or_inline = ...?;
let offset = ...?;
Ok(Some(...))13f8035 to
9477694
Compare
9477694 to
812b448
Compare
6a19624 to
06fdf84
Compare
## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing.
06fdf84 to
436ce44
Compare
## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints
nicklan
left a comment
There was a problem hiding this comment.
i think i've ignored the serde stuff successfully and this part lgtm :)
0fcd32f to
c976a3a
Compare
## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1499/files) to review incremental changes. - [**stack/dlr_commit**](delta-io#1499) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1499/files)] - [stack/dlr_manifest](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files/69a8312ad609546d2fbfac74f9d9082108bca41e..41eba152cc46b0ab3c4daf5ba11d80d5b52e4975)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/41eba152cc46b0ab3c4daf5ba11d80d5b52e4975..6227645580128ccd91946416e5fbb15ed46e3f64)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/6227645580128ccd91946416e5fbb15ed46e3f64..2e700abd0d6e12553819285b311c4ba1c49b4bf1)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/2e700abd0d6e12553819285b311c4ba1c49b4bf1..c016ad815161e6d44e7280c194b3407f3322905f)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/c016ad815161e6d44e7280c194b3407f3322905f..61f0908590d905f97ee8052aadaa5b64f74fc4de)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/61f0908590d905f97ee8052aadaa5b64f74fc4de..6865ff9760fa5716bc75d92cef9d43422804118d)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/6865ff9760fa5716bc75d92cef9d43422804118d..8d59594b63db32fdf208026f8784b7622675e3d8)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/8d59594b63db32fdf208026f8784b7622675e3d8..cb2a8c4f06d8aa412cc649348f6467b15bae2a9b)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/a3566ba6f3631224516b92238285ebe49626da01..4b6f568d2a6b57ac01af6264921a5ba6b2567abc)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/4b6f568d2a6b57ac01af6264921a5ba6b2567abc..be1183715647d39952529083bbb51c2266530f58)] --------- <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> This PR adds the commit logreader, a module that will hold all the logic for processing commit files when performing log replay. * CommitReader reads the delta log using the commit cover. * CommitReader implements `Iterator<Item = ActionBatch>`. * CommitReader can read using an arbitrary log schema. <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> This is tested with the `app-txn-no-checkpoint` which has multiple commits and multiple add actions in each commit. We ensure that the CommitReader reads the correct set of add actions.
…#1500) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing.
## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints
…#1500) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing.
## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints
* feat: Add CheckpointManifestReader to process sidecar files (delta-io#1500) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing. * feat: Distributed Log Replay Sequential Phase (delta-io#1502) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints * feat/bugfix: Passing schema from C, plus example/tests in C (delta-io#1535) ## What changes are proposed in this pull request? * Don't use a macro to generate primitive visitors. `cbindgen` runs before macro expansion, so previously none of those visitors were actually being generated * Add code to `read_table` to allow specifying which columns to select, plus all the associated code to pass that back to kernel * Add c based tests to make sure it's working ## How was this change tested? New tests when running `make test` in `read_table` --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> * feat!: expose mod time in scan metadata callbacks (delta-io#1565) * feat: Support sidecar in inspect-table (delta-io#1566) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Support sidecar in inspect-table. Solves the issue delta-io#695. <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Test locally. Used `./kernel/tests/data/v2-checkpoints-parquet-with-sidecars.tar.zst`. The output successfully print sidecar actions: ``` cargo run -p inspect-table -- v2-checkpoints-parquet-with-sidecars actions | head -17 Action 1: Sidecar { path: "00000000000000000006.checkpoint.0000000001.0000000002.76931b15-ead3-480d-b86c-afe55a577fc3.parquet", size_in_bytes: 12461, modification_time: 1739329719752, tags: None, } Action 2: Sidecar { path: "00000000000000000006.checkpoint.0000000002.0000000002.4367b29c-0e87-447f-8e81-9814cc01ad1f.parquet", size_in_bytes: 12109, modification_time: 1739329719746, tags: None, } ``` * fix: force usage of ListedLogFiles::try_new() (delta-io#1562) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Change field of `ListedLogFiles` to private to force the usage of `ListedLogFiles::try_new()` Solves the issue delta-io#1143 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? Existing tests <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> * fix compile * fix clippy --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> Co-authored-by: Nick Lanham <nicklan@users.noreply.github.com> Co-authored-by: dengsh12 <62536982+dengsh12@users.noreply.github.com>
* feat: Add CheckpointManifestReader to process sidecar files (delta-io#1500) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing. * feat: Distributed Log Replay Sequential Phase (delta-io#1502) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints * feat/bugfix: Passing schema from C, plus example/tests in C (delta-io#1535) ## What changes are proposed in this pull request? * Don't use a macro to generate primitive visitors. `cbindgen` runs before macro expansion, so previously none of those visitors were actually being generated * Add code to `read_table` to allow specifying which columns to select, plus all the associated code to pass that back to kernel * Add c based tests to make sure it's working ## How was this change tested? New tests when running `make test` in `read_table` --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> * feat!: expose mod time in scan metadata callbacks (delta-io#1565) * feat: Support sidecar in inspect-table (delta-io#1566) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Support sidecar in inspect-table. Solves the issue delta-io#695. <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Test locally. Used `./kernel/tests/data/v2-checkpoints-parquet-with-sidecars.tar.zst`. The output successfully print sidecar actions: ``` cargo run -p inspect-table -- v2-checkpoints-parquet-with-sidecars actions | head -17 Action 1: Sidecar { path: "00000000000000000006.checkpoint.0000000001.0000000002.76931b15-ead3-480d-b86c-afe55a577fc3.parquet", size_in_bytes: 12461, modification_time: 1739329719752, tags: None, } Action 2: Sidecar { path: "00000000000000000006.checkpoint.0000000002.0000000002.4367b29c-0e87-447f-8e81-9814cc01ad1f.parquet", size_in_bytes: 12109, modification_time: 1739329719746, tags: None, } ``` * fix: force usage of ListedLogFiles::try_new() (delta-io#1562) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Change field of `ListedLogFiles` to private to force the usage of `ListedLogFiles::try_new()` Solves the issue delta-io#1143 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? Existing tests <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> * fix: improve parse_json performance by removing line-by-line parsing (delta-io#1561) Co-authored-by: emkornfield <emkornfield@gmail.com> Co-authored-by: Nick Lanham <nick@databricks.com> * sync changelog from `0.18.2` (delta-io#1570) cherry-picks f105333 Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> Co-authored-by: Drake Lin <drakelin18@gmail.com> * feature: short-circuit coalesce evaluation when array has no nulls (delta-io#1568) ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Optimizes the coalesce expression evaluation in the default Arrow engine to short-circuit when an evaluated array has no null values. Previously, all expressions were eagerly evaluated before coalescing. - After evaluating each expression, check if `null_count() == 0` - If no nulls exist, validate the result type and return immediately without evaluating remaining expressions - `null_count()` on Arrow arrays is O(1) (cached value), so the check is essentially free. This optimization avoids evaluating potentially expensive expressions when earlier expressions already provide complete (non-null) results. Usecase: - For ParsedStats, we will see coalesces in both read/write - In read: we want to coalesce(parsed_stats, ParseJson(json_stats)) - In write: - ParsedStats: coalesce(parsed_stats, ParseJson(json_stats)) - JsonStats: coalesce(json_stats, ToJson(ParsedStats)) In each of these cases, all of one column will either be Null or non-Null so this optimization actually completely removes the need to evaluate the expensive parseJson/ToJson if unnecessary. Future improvements: - Track each row such that it short-circuits as soon as all rows are filled, even if no single array was 100% non-null - This can be implemented with FilteredEngineData, but that lacks support across the engine <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> new and existing unit tests * release 0.19.0 (delta-io#1571) release 0.19.0: [link to rendered changelog](https://github.com/zachschuermann/delta-kernel-rs/blob/a23efae27cf8bd7859a24ad66f57dcb0f6fac851/CHANGELOG.md) --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> Co-authored-by: Nick Lanham <nicklan@users.noreply.github.com> Co-authored-by: dengsh12 <62536982+dengsh12@users.noreply.github.com> Co-authored-by: R. Tyler Croy <rtyler@brokenco.de> Co-authored-by: emkornfield <emkornfield@gmail.com> Co-authored-by: Nick Lanham <nick@databricks.com> Co-authored-by: Zach Schuermann <zachary.zvs@gmail.com> Co-authored-by: Drake Lin <drakelin18@gmail.com>
10a3acd to
ab6f32c
Compare
…pressions (#1543) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1543/files) to review incremental changes. - [**stack/dlr_serialization_helpers**](#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files)] - [stack/dlr_serde](#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/24f9ac49c8fd3d846fbfd177e0e79f6205586abb..5a19246777bb92a49766105ba7cd6c3f1efd56a6)] - [stack/dlr_add_rm_dedup](#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/5a19246777bb92a49766105ba7cd6c3f1efd56a6..ab6f32ca7ede0b27a3c699dc9601d61ad30ddb44)] - [stack/dlr_immutable_add_rm_dedup](#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/ab6f32ca7ede0b27a3c699dc9601d61ad30ddb44..db1eac45ce60dc5c126120cfd25e6604c475ae31)] - [stack/dlr_executor](#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/db1eac45ce60dc5c126120cfd25e6604c475ae31..30fe3f9201723467eeb166dc2f9a632550291daf)] - [stack/dlr_api](#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/30fe3f9201723467eeb166dc2f9a632550291daf..26d21587e52964a519708222523ba75ffe21fe7d)] - [stack/dlr_scan_state_serde](#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/26d21587e52964a519708222523ba75ffe21fe7d..9035f876cbb4c2dc9f3d9fedf1d3f772238f66f9)] --------- <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> This PR adds the ability to serialize/deserialize expressions and predicates using serde. This is used in when transferring state across network boundaries such as in parallel log replay. <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? This PR adds serialization/deserialization to the expressions and predicates. Opaque expressions will fail since kernel cannot know how to serialize/deserialize them. ## How was this change tested? Ensure that serde fails in the presence of opaque expressions.
ab6f32c to
0789ba0
Compare
Co-authored-by: Nick Lanham <nicklan@users.noreply.github.com>
bc61e90 to
cb9f977
Compare
* feat: Add CheckpointManifestReader to process sidecar files (delta-io#1500) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1500/files) to review incremental changes. - [**stack/dlr_manifest**](delta-io#1500) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1500/files)] - [stack/dlr_driver](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files/2f0a14caf7cd1070625525868e18da9c300b8a0f..4285e9c8ae504fe697b83f4719c0e0995e0e3bd1)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/4285e9c8ae504fe697b83f4719c0e0995e0e3bd1..60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/60f13ec6ee1f7cc2b57006a09d4b0e82b59733b9..377ae3f2596116d00cba596268090d2f69118b2e)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/377ae3f2596116d00cba596268090d2f69118b2e..06fdf84431d7ee9cf693149784b11e4afb242de1)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/06fdf84431d7ee9cf693149784b11e4afb242de1..991cdd69f18eb680dbafae3c213093b036cb7a85)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/991cdd69f18eb680dbafae3c213093b036cb7a85..1f52bbc6512d7cb0a5e2a68954eb434be7313ef0)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/1f52bbc6512d7cb0a5e2a68954eb434be7313ef0..9a4f638d613121fe5819e3fef6c03b3e5102ab73)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/9a4f638d613121fe5819e3fef6c03b3e5102ab73..f385656ab1aa1f34caf77fa8518834d0ac0b998c)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/f385656ab1aa1f34caf77fa8518834d0ac0b998c..ac99eeec1f5d19fe76e8589f87cf53a7aa140e54)] --------- This PR adds a CheckpointManifestReader that is responsible for reading both manifest checkpoints and single-part checkpoints. For manifest checkpoints, it collects all the sidecar files that are present and returns them for further processing. * feat: Distributed Log Replay Sequential Phase (delta-io#1502) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1502/files) to review incremental changes. - [**stack/dlr_driver**](delta-io#1502) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1502/files)] - [stack/dlr_serialization_helpers](delta-io#1543) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1543/files/8f86b459613c0f018dd0e45473ba3e6e50d127af..0286f1d09006b099e73333c3d2d6a0873ede6cdd)] - [stack/dlr_serde](delta-io#1503) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1503/files/0286f1d09006b099e73333c3d2d6a0873ede6cdd..ee68c851e338a83584b004d919c40eca301e2ee3)] - [stack/dlr_add_rm_dedup](delta-io#1537) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1537/files/ee68c851e338a83584b004d919c40eca301e2ee3..436ce448e2dbf08ceb8f13350cb609ae3f554a7c)] - [stack/dlr_immutable_add_rm_dedup](delta-io#1538) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1538/files/436ce448e2dbf08ceb8f13350cb609ae3f554a7c..b2c2703bef78ef814c0579e82857cd67a2d1364b)] - [stack/dlr_leaf](delta-io#1501) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1501/files/b2c2703bef78ef814c0579e82857cd67a2d1364b..5f04e2059209c09a3ac8f5981d018347829bd8ab)] - [stack/dlr_executor](delta-io#1539) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1539/files/5f04e2059209c09a3ac8f5981d018347829bd8ab..7e2d26a6b063927e8b9a9fa62043ad30c705cc43)] - [stack/dlr_api](delta-io#1547) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1547/files/7e2d26a6b063927e8b9a9fa62043ad30c705cc43..b608475ed1402d8640b89e5948d066e0867585b3)] - [stack/dlr_scan_state_serde](delta-io#1549) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1549/files/b608475ed1402d8640b89e5948d066e0867585b3..c35994fbf457ed95556acc7688456feb81923abf)] --------- ## What changes are proposed in this pull request? This pull request introduces the SequentialPhase for distributed log replay. This phase reads the commit and checkpoint files for a logsegment and performs the log replay processor over the batches. Upon completion, the `finish` method produces `AfterSequential` which has two variants: * `Done`: Indicates that the metadata phase is complete and there is no more work to do. * `Distributed`: Indicates that a distributed phase is required (see the pr at stack/dlr_executor) ## How was this change tested? Ensure that the sequential phase extracts the expected actions for: * commits * single-part checkpoints Ensure that sequential phase produces `AfterSequential::Distributed` in the presence of: * sidecar files in a manifest checkpoint * multi-part checkpoints * feat/bugfix: Passing schema from C, plus example/tests in C (delta-io#1535) ## What changes are proposed in this pull request? * Don't use a macro to generate primitive visitors. `cbindgen` runs before macro expansion, so previously none of those visitors were actually being generated * Add code to `read_table` to allow specifying which columns to select, plus all the associated code to pass that back to kernel * Add c based tests to make sure it's working ## How was this change tested? New tests when running `make test` in `read_table` --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> * feat!: expose mod time in scan metadata callbacks (delta-io#1565) * feat: Support sidecar in inspect-table (delta-io#1566) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Support sidecar in inspect-table. Solves the issue delta-io#695. <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Test locally. Used `./kernel/tests/data/v2-checkpoints-parquet-with-sidecars.tar.zst`. The output successfully print sidecar actions: ``` cargo run -p inspect-table -- v2-checkpoints-parquet-with-sidecars actions | head -17 Action 1: Sidecar { path: "00000000000000000006.checkpoint.0000000001.0000000002.76931b15-ead3-480d-b86c-afe55a577fc3.parquet", size_in_bytes: 12461, modification_time: 1739329719752, tags: None, } Action 2: Sidecar { path: "00000000000000000006.checkpoint.0000000002.0000000002.4367b29c-0e87-447f-8e81-9814cc01ad1f.parquet", size_in_bytes: 12109, modification_time: 1739329719746, tags: None, } ``` * fix: force usage of ListedLogFiles::try_new() (delta-io#1562) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Change field of `ListedLogFiles` to private to force the usage of `ListedLogFiles::try_new()` Solves the issue delta-io#1143 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? Existing tests <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> * fix: improve parse_json performance by removing line-by-line parsing (delta-io#1561) Co-authored-by: emkornfield <emkornfield@gmail.com> Co-authored-by: Nick Lanham <nick@databricks.com> * sync changelog from `0.18.2` (delta-io#1570) cherry-picks f105333 Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> Co-authored-by: Drake Lin <drakelin18@gmail.com> * feature: short-circuit coalesce evaluation when array has no nulls (delta-io#1568) ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Optimizes the coalesce expression evaluation in the default Arrow engine to short-circuit when an evaluated array has no null values. Previously, all expressions were eagerly evaluated before coalescing. - After evaluating each expression, check if `null_count() == 0` - If no nulls exist, validate the result type and return immediately without evaluating remaining expressions - `null_count()` on Arrow arrays is O(1) (cached value), so the check is essentially free. This optimization avoids evaluating potentially expensive expressions when earlier expressions already provide complete (non-null) results. Usecase: - For ParsedStats, we will see coalesces in both read/write - In read: we want to coalesce(parsed_stats, ParseJson(json_stats)) - In write: - ParsedStats: coalesce(parsed_stats, ParseJson(json_stats)) - JsonStats: coalesce(json_stats, ToJson(ParsedStats)) In each of these cases, all of one column will either be Null or non-Null so this optimization actually completely removes the need to evaluate the expensive parseJson/ToJson if unnecessary. Future improvements: - Track each row such that it short-circuits as soon as all rows are filled, even if no single array was 100% non-null - This can be implemented with FilteredEngineData, but that lacks support across the engine <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> new and existing unit tests * release 0.19.0 (delta-io#1571) release 0.19.0: [link to rendered changelog](https://github.com/zachschuermann/delta-kernel-rs/blob/a23efae27cf8bd7859a24ad66f57dcb0f6fac851/CHANGELOG.md) * [Test Only] Minor refactor to log_segment tests (delta-io#1581) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1581/files) to review incremental changes. - [**stack/log_segment_tests_refactor**](delta-io#1581) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1581/files)] --------- This PR refactors the `create_segment_for` test helper method inside of `log_segment/tests.rs`. Instead of taking in N params, we take in a struct (that contains those N params). This will make adding new params in the future easier and cleaner (e.g. staged catalog commits) * Refactor `ListedLogFiles::try_new` to be more extensible and with default values by using builder pattern (delta-io#1585) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1585/files) to review incremental changes. - [**stack/listed_log_files_refactor**](delta-io#1585) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1585/files)] --------- This PR refactors `ListedLogFiles::try_new` to instead be `ListedLogFilesBuilder::build()`. This allows using default values in the `ListedLogFilesBuilder`, which will make creating `ListedLogFiles` easier in the future (e.g. when we add `max_known_published_commit_version`). * Fix: add type validation for `evaluate_expression` (delta-io#1575) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Add missing `result_type` validation in `evaluate_expression` for `Literal`, `Column`, and `Binary` branches. This resolves delta-io#1572 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> new and existing unit tests * refactor: move doctest into mods (delta-io#1574) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Currently all doctests live inline in `kernel/src/lib.rs`. This PR moves them to `kernel/src/doctests/` with separate files per macro, making it easier to add new macro tests without enlarging `lib.rs`. Related: delta-io#991 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Ran existing tests * feat: add checkpoint schema discovery for stats_parsed detection (delta-io#1550) ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> This PR adds infrastructure for discovering checkpoint schemas and detecting whether `stats_parsed` is available for data skipping optimization. 1. Store checkpoint schema in LogSegment (`log_segment.rs`) 2. Add stats_parsed detection (`log_segment.rs`) - During log replay / sidecar visiting, we figure out the schema for the file action files (whether the sidecar parquet files for V2 checkpoints or the V1 checkpoint parquet. ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> - Existing log segment tests updated * refactor: deny panics in ffi crate (delta-io#1576) <!-- Thanks for sending a pull request! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: https://github.com/delta-incubator/delta-kernel-rs/blob/main/CONTRIBUTING.md 2. Run `cargo t --all-features --all-targets` to get started testing, and run `cargo fmt`. 3. Ensure you have added or run the appropriate tests for your PR. 4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., '[WIP] Your PR title ...'. 5. Be sure to keep the PR description updated to reflect all changes. --> <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> 1. Add clippy lints to deny panics in the FFI crate (non-test code) 2. Fix violations by returning errors instead of panicking 3. Allow `expect` in theoretically unreachable paths <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Existing tests in `ffi/examples/read-table` * Remove comments and text from `pull_request_template.md` (delta-io#1589) ## What changes are proposed in this pull request? Move text from `pull_request_template.md` to `CONTRIBUTING.md`. Make PR template file name all-caps. ## How was this change tested? N/A. * feat!: add deletion vector APIs to transaction (delta-io#1430) Adds the ability to update deletion vectors on delta tables. Co-authored-by: Drake Lin <drakelin18@gmail.com> Co-authored-by: Nick Lanham <nicklan@users.noreply.github.com> * feat: Add doctests for `IntoEngineData` derive macro (delta-io#1580) <!-- PR title formatting: This project uses conventional commits: https://www.conventionalcommits.org/ Each PR corresponds to a commit on the `main` branch, with the title of the PR (typically) being used for the commit message on main. In order to ensure proper formatting in the CHANGELOG please ensure your PR title adheres to the conventional commit specification. Examples: - new feature PR: "feat: new API for snapshot.update()" - bugfix PR: "fix: correctly apply DV in read-table example" --> ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> This PR: - Changes the `IntoEngineData` macro to use `delta_kernel::` paths - Adds doctests for the derive macro Related: delta-io#991 <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Added tests. * feat: Create `DefaultEngineBuilder` to build `DefaultEngine` (delta-io#1582) ## 🥞 Stacked PR Use this [link](https://github.com/delta-io/delta-kernel-rs/pull/1582/files) to review incremental changes. - [**stack/engine-builder**](delta-io#1582) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1582/files)] - [stack/remove-constructor](delta-io#1583) [[Files changed](https://github.com/delta-io/delta-kernel-rs/pull/1583/files/29e082a58b9382149285f30351d53468d6ed49dc..0026634ac5bf5f546d45a4d25dd0f46cb8d39d1b)] --------- ## What changes are proposed in this pull request? <!-- Please clarify what changes you are proposing and why the changes are needed. The purpose of this section is to outline the changes, why they are needed, and how this PR fixes the issue. If the reason for the change is already explained clearly in an issue, then it does not need to be restated here. 1. If you propose a new API or feature, clarify the use case for a new API or feature. 2. If you fix a bug, you can clarify why it is a bug. --> Add `DefaultEngineBuilder` for more flexible engine construction and align with the builder pattern used elsewhere in this repo. ## Detail changes - Add generic `DefaultEngineBuilder<E>` with builder pattern - Support `with_task_executor()` to use custom executors - Support `with_metrics_reporter()` for metrics collection - Add `DefaultEngine::builder()` convenience method <!-- Uncomment this section if there are any changes affecting public APIs: ### This PR affects the following public APIs If there are breaking changes, please ensure the `breaking-changes` label gets added by CI, and describe why the changes are needed. Note that _new_ public APIs are not considered breaking. --> ## How was this change tested? <!-- Please make sure to add test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested, ideally via a reproducible test documented in the PR description. --> Added tests. * refactor: extract shared HTTP utilities to http.rs (delta-io#1590) ## What changes are proposed in this pull request? Extract `build_http_client`, `execute_with_retry`, and `handle_response` from `UCClient` into a shared `http.rs` module. This enables reuse by other client implementations (and is used in the child stacked PR delta-io#1590) ## How was this change tested? `cargo build -p uc-client -p uc-catalog` * Fix conflicts * Fix dangling conflicts * Fix the tests --------- Co-authored-by: OussamaSaoudi <45303303+OussamaSaoudi@users.noreply.github.com> Co-authored-by: Nick Lanham <nicklan@users.noreply.github.com> Co-authored-by: dengsh12 <62536982+dengsh12@users.noreply.github.com> Co-authored-by: R. Tyler Croy <rtyler@brokenco.de> Co-authored-by: emkornfield <emkornfield@gmail.com> Co-authored-by: Nick Lanham <nick@databricks.com> Co-authored-by: Zach Schuermann <zachary.zvs@gmail.com> Co-authored-by: Drake Lin <drakelin18@gmail.com> Co-authored-by: Scott Sandre <scott.sandre@databricks.com>
🥞 Stacked PR
Use this link to review incremental changes.
What changes are proposed in this pull request?
This PR introduces the
Deduplicatortrait which will unify Commit and Checkpoint deduplication under a single API. This is done to move the&mut HashSet<..>out ofAddRemoveDedupand behind theDeduplicatortrait. That way, we can reuseAddRemoveDedupVisitorin an immutable scenario.How was this change tested?