Skip to content

Skip the lowercased read-back of a feature's full_name - #7398

Draft
Daniel114510 wants to merge 3 commits into
mainfrom
fs2524-features-full-name-case
Draft

Daniel114510 wants to merge 3 commits into
mainfrom
fs2524-features-full-name-case

Conversation

@Daniel114510

Copy link
Copy Markdown
Member

UC lowercases a feature's name, and create and get return it that way. Listing full_name in provided_id_fields skips that read-back difference, as it does for schemas and feature specs, so a mixed-case full_name no longer recreates the feature on every plan. The fake lowercases the name like the real endpoint.

Changes

Why

Tests

UC lowercases a feature's name, and create and get return it that way.
Listing full_name in provided_id_fields skips that read-back difference, as
it does for schemas and feature specs, so a mixed-case full_name no longer
recreates the feature on every plan. The fake lowercases the name like the
real endpoint.

Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions github-actions Bot added the DABs DABs related issues label Nov 8, 2026
Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions

github-actions Bot commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

Commit: 27398b878 | Workflow run

Regression test report

Selected 1 changed tests (limit=20, 0 not selected)

1 tests: regression=1 unreleased=0 coverage=0 failing=0
test branch main (21db1be) latest (v1.24.0)
TestAccept/bundle/resources/features/uppercase-name/DMS= ✅ ❌ ❌
TestAccept/bundle/resources/features/uppercase-name/DMS=: branch ✅ | main (21db1be) ❌ | latest (v1.24.0) ❌

main (21db1be):

acceptance_test.go:1345: Diff:
        --- bundle/resources/features/uppercase-name/output.txt
        +++ /tmp/TestAcceptbundleresourcesfeaturesuppercase-nameDMS=2082228927/002/output.txt
        @@ -48,19 +48,21 @@
         >>> [CLI] bundle plan -o json
         {
           "resources.features.feature1": {
        -    "action": "skip",
        +    "action": "recreate",
             "changes": {
               "full_name": {
        -        "action": "skip",
        -        "reason": "id_field"
        +        "action": "recreate",
        +        "reason": "spec:immutable"
               }
             }
           }
         }
         
         >>> [CLI] bundle plan
        -Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged
        +recreate features.feature1
         
        +Plan: 1 to add, 0 to change, 1 to delete, 0 unchanged
        +
         === Renaming the feature still recreates it
         >>> update_file.py databricks.yml main.myschema.MyFeature main.myschema.MyOtherFeature
         
        
FAIL

latest (v1.24.0): same output as main (21db1be)

@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

❌ Integration test report

Commit: 5bd66aa

Run: 42463958487

Env ❌​FAIL 🤯​MISS 🔄​flaky ✅​pass 🙈​skip Time
❌​ aws linux-2core-8gb 1 2 270 15 3:25
❌​ azure-windows-latest-4core-16gb 1 2 271 13 2:59
❌​ gcp linux-2core-8gb 1 2 270 15 3:30
🔄​ gcp-windows-latest-4core-16gb 1 272 15 5:14
Test Name aws linux-2core-8gb azure-windows-latest-4core-16gb gcp linux-2core-8gb gcp-windows-latest-4core-16gb
❌​ TestAccept ❌​F ❌​F ❌​F 🔄​f
🤯​ TestAccept/bundle/resources/features/uppercase-name 🤯​M 🤯​M 🤯​M 🙈​s
🤯​ TestAccept/bundle/resources/materialization_sets/uppercase-name 🤯​M 🤯​M 🤯​M 🙈​s
Top 1 slowest tests (at least 2 minutes):
duration env testname
2:35 gcp-windows-latest-4core-16gb TestAccept

UC stores a feature's name lowercase and the service requires a set member to name its feature
that way, while a member's feature_name keeps the config spelling, whether it is written out, a
reference to a feature, or built from a schema resource's name. So a mixed-case member was rejected
at create, and a set holding one planned a recreate on every deploy.

- MaterializedFeatureMemberKey lowercases the feature name, so a mixed-case member pairs with its
  lowercase read-back. A name holding an unresolved reference keeps its case, since resource keys
  are case-sensitive.
- OverrideChangeDesc skips the feature_name of a paired member, which can then differ only in case.
- DoCreate and DoUpdate send a copy of the set with each member's feature name lowercased.
- The test server's set create refuses a member that does not name its feature in lowercase, with
  the service's message.

Co-authored-by: Isaac <no-reply@databricks.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DABs DABs related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants