Skip to content

Fix "Nothing to update" when a UC comment is set outside the bundle - #6343

Draft
denik wants to merge 5 commits into
mainfrom
denik/issue-6340
Draft

Fix "Nothing to update" when a UC comment is set outside the bundle#6343
denik wants to merge 5 commits into
mainfrom
denik/issue-6340

Conversation

@denik

@denik denik commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Changes

A schema declared without comment became undeployable on the direct engine as
soon as someone set a description on it in UC. The engine reads the remote
comment, plans an update, and every field of UpdateSchema is omitempty, so
the PATCH body came out empty. UC answers that with
400 INVALID_PARAMETER_VALUE / UpdateSchema Nothing to update instead of a
no-op, failing the whole deploy with no way out from the CLI.

Catalogs and volumes have the same shape and fail the same way — verified
against a real workspace, {} returns UpdateCatalog Nothing to update and
UpdateVolume Nothing to update.

Force-send comment in all five update paths (catalogs and volumes each have a
rename variant) so the payload always carries a field and the comment is
actually cleared, which is what the plan already said it wanted to do.

backend_defaults (the other option the issue suggests) is not right here:
a comment set in Catalog Explorer is real drift, not a value the backend filled
in, and suppressing it would silently stop the bundle from managing comment.
That treatment is correct for properties['unity.catalog.managed.*.defaults.*'],
which already carries such a rule, because UC cannot clear properties at all
— an empty or null map is itself rejected as "nothing to update". comment can
be cleared, so it should be.

Tests

New acceptance tests for schemas, catalogs and volumes, each running locally and
on cloud. The first commit adds the schema one and makes the fake workspace
reject an empty UC update payload the way UC does, so the local run fails exactly
like the cloud one; the later commits turn them green.

The fake's rejection is a real guard, not decoration: with forceSendComment
stubbed out to a no-op, all three tests fail locally with the same
Nothing to update error the backend returns.

Terraform does not plan an update for this drift at all, so it is unaffected
(it also never converges — the out-of-band comment just stays).

Fixes #6340

This pull request and its description were written by Isaac.

denik added 3 commits August 21, 2026 18:13
…he bundle

A schema without `comment` in the config becomes undeployable once someone sets
a description on it in UC: the engine reads the remote comment, plans an update,
and every field of the PATCH serializes away under omitempty. UC rejects the
empty body with `400 INVALID_PARAMETER_VALUE / UpdateSchema Nothing to update`,
which aborts the whole deploy.

Add an acceptance test for it and make the fake workspace reject an empty
UpdateSchema payload the way UC does, so the local run fails the same way the
cloud one does.

Co-authored-by: Isaac
…n empty PATCH

Every UpdateSchema field is omitempty, so a schema whose config declares no
comment produced an empty PATCH body once the comment was set out of band. UC
answers that with `400 / UpdateSchema Nothing to update` rather than a no-op,
which failed the whole deploy with no way out from the CLI.

Force-send comment so the payload always carries a field and clearing a comment
set outside the bundle actually happens.

Co-authored-by: Isaac
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: a2dddae

Run: 32565717110

Env 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
💚​ aws linux 1 4 280 1164 3:20
💚​ aws windows 1 4 282 1162 5:34
💚​ azure linux 1 4 279 1164 3:20
💚​ azure windows 1 4 281 1162 3:40
💚​ gcp linux 1 4 280 1164 3:42
💚​ gcp windows 1 4 282 1162 4:07
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
🙈​ TestAccept/bundle/invariant/no_drift 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/ssh/connection 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
Top 3 slowest tests (at least 2 minutes):
duration env testname
5:11 aws windows TestAccept
3:41 gcp windows TestAccept
3:17 azure windows TestAccept

Catalogs and volumes fail exactly like schemas did: their update payloads carry
only fields the config may leave unset, so clearing a comment that was set out of
band produced an empty PATCH and `400 / Nothing to update`. Verified against a
real workspace for both.

Force-send comment in all four update paths (catalogs and volumes each have a
rename variant), moving the shared reason into forceSendComment, and teach the
fake workspace to reject an empty payload and honour an explicit empty comment
the way UC does.

Co-authored-by: Isaac
@denik denik changed the title Fix "UpdateSchema Nothing to update" when a schema comment is set outside the bundle Fix "Nothing to update" when a UC comment is set outside the bundle Aug 22, 2026
The bundle name is the workspace state path, and cloud tests share one real
workspace, so the hardcoded "test-bundle" made these three fight over the same
deploy.lock as every other test using that name. They passed run alone and
failed under parallelism: the integration run reported success while retrying
them on nearly every environment.

Co-authored-by: Isaac
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.

direct engine hard-fails with UpdateSchema Nothing to update when a schema comment is set outside the bundl

2 participants