Skip to content

Conversation

@sanujbasu
Copy link
Collaborator

@sanujbasu sanujbasu commented Jan 23, 2026

🥞 Stacked PR

Use this link to review incremental changes.


What changes are proposed in this pull request?

Adds support for user and system domain metadata (domains with 'delta.' prefix)
processing during table creation in the transactions module. This enables features
like clustering to be configured at table creation time. Invariants are validated and
feature checks performed.

Changes:

  • Refactors generate_domain_metadata_actions to consume domain metadata
    actions passed down by the create table builder.
  • Refactors validate_user_domain_operations() to
    validate_domain_metadata_operations() which enforces a myriad of
    domain metadata invariants.
  • Adds validate_system_domain_feature to make sure relevant features
    are supported when row tracking and clustering domain metadata are
    pushed down.

Clustered table creation support will be added in a stacked PR. The
PR with push down the domain metadata for clustered tables into the log.

How was this change tested?

-Integration tests to be added in kernel/tests/create_table.rs once
clustered table creation support is implement since validation testing
requires feature allow listing.

-Existing tests around domain metadata to cover regressions.

@sanujbasu sanujbasu marked this pull request as ready for review January 23, 2026 11:21
@github-actions github-actions bot added the breaking-change Change that require a major version bump label Jan 23, 2026
@sanujbasu sanujbasu force-pushed the stack/create_table_4 branch 2 times, most recently from 4356a80 to 65f7aed Compare January 23, 2026 23:55
@github-actions github-actions bot removed the breaking-change Change that require a major version bump label Jan 24, 2026
@codecov
Copy link

codecov bot commented Jan 24, 2026

Codecov Report

❌ Patch coverage is 91.04116% with 37 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.69%. Comparing base (a58cbb1) to head (cf03941).

Files with missing lines Patch % Lines
kernel/src/transaction/mod.rs 59.42% 25 Missing and 3 partials ⚠️
kernel/src/table_property_protocol_config.rs 98.16% 3 Missing and 1 partial ⚠️
kernel/src/row_tracking.rs 77.77% 1 Missing and 1 partial ⚠️
kernel/src/table_features/mod.rs 96.66% 0 Missing and 1 partial ⚠️
kernel/src/transaction/create_table.rs 98.66% 0 Missing and 1 partial ⚠️
kernel/src/utils.rs 91.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1669      +/-   ##
==========================================
+ Coverage   84.64%   84.69%   +0.05%     
==========================================
  Files         125      126       +1     
  Lines       34721    35043     +322     
  Branches    34721    35043     +322     
==========================================
+ Hits        29388    29681     +293     
- Misses       3983     4009      +26     
- Partials     1350     1353       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@sanujbasu sanujbasu force-pushed the stack/create_table_4 branch from 65f7aed to 88130c8 Compare January 24, 2026 00:13
1. Adds the ability to explicitly enable table features via table properties
using the delta.feature.<featureName> = supported syntax, matching the
Java Kernel's behavior. Only ALLOWED_DELTA_FEATURES can be set during
create. Features get added to protocol features.

2. Allows the min reader/ writer versions to be updated in the protocol using
signal flags. Only protocol versions (3, 7) are supported.

Key Changes:
- Add SET_TABLE_FEATURE_SUPPORTED_PREFIX and SET_TABLE_FEATURE_SUPPORTED_VALUE
  constants to table_features module. Move the feature/ property allow/
  deny list to the table property configuration module
- Add TableFeature::from_name() to parse feature names from strings
- Add TableFeature::is_reader_writer() to check feature type
- Add TableCreationConfig struct to encapsulate parsing and validation of
user-provided table properties during CREATE TABLE operations.
- Extract delta.feature.* signal flags into reader/writer feature lists
- Extract delta.minReaderVersion/minWriterVersion into protocol hints
- Strip signal flags from properties, pass remaining to metadata
- Reject unknown features and invalid feature flag values

Usage:
create_table("/path/to/table", schema, "MyApp/1.0")
    .with_table_properties([
        ("delta.minReaderVersion", "3"),
        ("delta.minWriterVersion", "7"),
    ])
    .build(&engine, Box::new(FileSystemCommitter::new()))?
    .commit(&engine)?;

The delta.feature.* properties are consumed during build() and not stored
in the final Metadata configuration, matching Java Kernel behavior.
Adds support for user and system domain metadata (domains with 'delta.' prefix)
during table creation. This enables features like clustering to be configured at
table creation time. Invariants are validated and feature checks
performed.

Changes:
- Refactors generate_domain_metadata_actions to consume domain metadata
  actions passed down by the create table builder.
- Refactors validate_user_domain_operations() to
  validate_domain_metadata_operations() which enforces a myriad of
  domain metadata invariants.
- Adds validate_system_domain_feature to make sure relevant features
  are supported when row tracking and clustering domain metadata are
  pushed down.

Clustered table creation support will be added in a stacked PR. The
PR with push down the domain metadata for clustered tables into the log.

Integration tests to be added in  kernel/tests/create_table.rs once
clustered table creation support is implement since validation testing
requires feature allow listing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant