Skip to content

acc: extend no_drift to test field removals - #6773

Merged
denik merged 7 commits into
mainfrom
denik/field-removal-tests
Sep 22, 2026
Merged

denik merged 7 commits into
mainfrom
denik/field-removal-tests

Conversation

@denik

@denik denik commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Changes

Extends the invariant tests with a field-removal check: after the baseline no-drift deploy, fields tagged # CAN_REMOVE are stripped from the config, and the test asserts the removal is applied as an update that leaves no drift. This guards the class of bug where a field the config stops declaring is dropped from the update request instead of being cleared (#6343) — which either fails the deploy or never converges.

Every resource config with a cleanly-removable scalar is tagged (comment on the UC securables, description on jobs/models/cluster policies/apps, etc.). Fields whose removal still misbehaves are tagged # CANNOT_REMOVE with the reason inline:

  • catalogs.custom_max_retention_hours — not force-sent, drifts back every plan
  • genie_spaces.description — not force-sent, perpetual drift
  • postgres_projects.display_name — added to the update_mask but dropped from the body, backend 400s

Misbehaving fields extracted from #6452

This pull request and its description were written by Isaac.

Removing a non-required field must be applied as an update that converges,
not dropped from the request (#6343). Tag a removable field `# CAN_REMOVE`;
the test strips those lines, asserts the plan is an update, and checks there
is no drift after deploying it. Configs without the marker only run the
baseline no-drift check. `# CANNOT_REMOVE` documents fields whose removal
still misbehaves (perpetual drift, or a 400 when the field is dropped from a
masked update), with the reason inline.

Co-authored-by: Isaac <no-reply@databricks.com>
@denik denik changed the title acceptance: add field_removal invariant test acc: add field_removal invariant test Sep 21, 2026
denik and others added 6 commits September 21, 2026 15:55
Co-authored-by: Isaac <no-reply@databricks.com>
Adds removal coverage for properties (single-key), enable_elastic_disk,
auto_stop_mins, max_num_clusters and target_qps (all converge, CAN_REMOVE),
and documents more fields whose removal misbehaves as CANNOT_REMOVE:

- schemas.properties (whole map): maps ignore ForceSendFields, so clearing drifts
- secrets.comment: not force-sent, drifts
- dashboards.display_name: required, removal fails validation
- postgres_branches.no_expiry, postgres_endpoints.autoscaling/disabled,
  postgres_projects.default_endpoint_settings: added to update_mask but dropped
  from the body, backend 400s

Co-authored-by: Isaac <no-reply@databricks.com>
Adding the field_removal invariant target means editing a config now also
selects its field_removal variants; regenerate selftest/selection/output.txt.

Co-authored-by: Isaac <no-reply@databricks.com>
Match the marker as `# CAN_REMOVE` (with the `# ` prefix) so that neither
`# CANNOT_REMOVE` nor a comment that merely mentions the marker in prose can
trigger the removal cycle or be stripped. Keep the map-valued CANNOT_REMOVE
fields (schemas.properties, postgres_projects.default_endpoint_settings) on a
single line so a future fix is a one-line flip to `# CAN_REMOVE`.

Co-authored-by: Isaac <no-reply@databricks.com>
…d-only)

A cloud run of field_removal surfaced two removals that converge against the
local testserver but fail on a real workspace:

- models.description: the MLflow model registry rejects an empty description on
  update with 400 "Description cannot be empty"
- vector_search_endpoints.target_qps: not re-sent on update, so it drifts back

Both are kept as CANNOT_REMOVE with the cloud-only caveat noted inline. Rest of
the cloud-eligible field_removal matrix passes (43/43).

Co-authored-by: Isaac <no-reply@databricks.com>
The field_removal target re-ran no_drift's deploy+plan as its baseline for every
config, to add a removal check only ~14 use. Move the removal cycle into no_drift
(guarded to the non-READPLAN variant, and only when a `# CAN_REMOVE` field is
present) so it reuses the existing baseline instead of duplicating it, and delete
the separate target. Also drop the #6343 references from the CANNOT_REMOVE
comments: #6343 fixed comment-clearing and is not the source of these failures, so
each comment now just states its own mechanism.

Co-authored-by: Isaac <no-reply@databricks.com>
@denik denik changed the title acc: add field_removal invariant test acc: extend no_drift to test field removals Sep 21, 2026
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: cc5a9d6

Run: 35616218535

Env ✅​pass 🙈​skip Time
✅​ aws linux 339 154 16:36
✅​ aws windows 341 152 20:59
✅​ azure linux 338 154 20:32
✅​ azure windows 340 152 24:48
✅​ gcp linux 339 154 16:31
✅​ gcp windows 341 152 22:18
Top 21 slowest tests (at least 2 minutes):
duration env testname
4:20 gcp windows TestAccept
3:23 azure windows TestAccept
3:20 aws windows TestAccept
2:46 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=registered_model.yml.tmpl/READPLAN=
2:41 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1
2:40 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=catalog.yml.tmpl/READPLAN=1
2:32 azure windows TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl
2:31 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=volume.yml.tmpl/READPLAN=
2:31 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1
2:28 gcp linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=1
2:20 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job.yml.tmpl/READPLAN=1
2:14 gcp linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job.yml.tmpl/READPLAN=1
2:07 azure windows TestAccept/bundle/invariant/destroy_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl/READPLAN=
2:06 aws linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=vector_search_endpoint.yml.tmpl/READPLAN=
2:05 aws windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1
2:05 gcp windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1
2:03 aws windows TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl
2:02 azure windows TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl/READPLAN=
2:02 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=registered_model.yml.tmpl/READPLAN=1
2:01 aws linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=vector_search_endpoint.yml.tmpl/READPLAN=1
2:01 azure linux TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=pipeline.yml.tmpl/READPLAN=1

Comment on lines +9 to +12
# CANNOT_REMOVE: target_qps is not re-sent on update, so clearing it leaves the old value
# and the plan re-proposes the change on every deploy (only reproducible on cloud; the
# local testserver converges).
target_qps: 2

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interesting backend behaviour, -1 is the value to unset it. don't think we want to take on that ownership though here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do they use -1 because 0 is meaningful somehow?

@denik
denik added this pull request to the merge queue Sep 22, 2026
Merged via the queue into main with commit 70688d8 Sep 22, 2026
54 of 56 checks passed
@denik
denik deleted the denik/field-removal-tests branch September 22, 2026 10:18
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 70688d8

Run: 35715324626

Env ❌​FAIL 🔄​flaky ✅​pass 🙈​skip Time
❌​ aws linux 3 8 1642 1084 212:44
❌​ aws windows 34 1520 1109 233:19
✅​ azure linux 1466 1133 142:46
✅​ azure windows 1367 1158 190:30
✅​ gcp linux 1452 1137 183:34
🔄​ gcp windows 5 1348 1162 218:08
47 interesting tests: 36 FAIL, 11 flaky
Test Name aws linux aws windows gcp windows
❌​ TestAccept ❌​F ❌​F ✅​p
❌​ TestAccept/bundle/apps/job_permissions ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ❌​F ✅​p
🔄​ TestAccept/bundle/debug/fetch-repository-info ✅​p ✅​p 🔄​f
🔄​ TestAccept/bundle/debug/fetch-repository-info/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true ✅​p ✅​p 🔄​f
❌​ TestAccept/bundle/deploy/mlops-stacks ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= ✅​p ❌​F ✅​p
🔄​ TestAccept/bundle/dms/declined-deploy 🔄​f ✅​p ✅​p
🔄​ TestAccept/bundle/dms/declined-deploy/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🔄​f ✅​p ✅​p
❌​ TestAccept/bundle/invariant/no_drift ✅​p ❌​F ✅​p
🔄​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl/READPLAN= ✅​p ✅​p 🔄​f
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=app.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job_escaped_refs.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job_escaped_refs.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=/INPUT_CONFIG=job_run.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_libraries.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_policy.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN= ✅​p ❌​F ✅​p
❌​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN=1 ✅​p ❌​F ✅​p
🔄​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=vector_search_index.yml.tmpl/READPLAN= ✅​p ✅​p 🔄​f
🔄​ TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=vector_search_index.yml.tmpl/READPLAN=1 ✅​p ✅​p 🔄​f
🔄​ TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS= 🔄​f ✅​p ✅​p
🔄​ TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true 🔄​f ✅​p ✅​p
❌​ TestAccept/bundle/resources/postgres_branches/recreate ✅​p ❌​F 🙈​s
❌​ TestAccept/bundle/resources/postgres_branches/recreate/DATABRICKS_BUNDLE_ENGINE=direct/DMS= ✅​p ❌​F
🔄​ TestAccept/bundle/resources/postgres_databases/recreate 🔄​f ✅​p 🙈​s
🔄​ TestAccept/bundle/resources/postgres_databases/recreate/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🔄​f ✅​p
❌​ TestAccept/bundle/resources/postgres_synced_tables/recreate 🔄​f ❌​F 🙈​s
❌​ TestAccept/bundle/resources/postgres_synced_tables/recreate/DATABRICKS_BUNDLE_ENGINE=terraform/DMS= 🔄​f ❌​F
❌​ TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name ❌​F ✅​p ✅​p
❌​ TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true ❌​F ✅​p ✅​p
Top 50 slowest tests (at least 2 minutes):
duration env testname
13:00 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
12:41 gcp windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
12:28 gcp windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
12:26 gcp linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
11:17 aws linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
11:04 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
10:29 gcp windows TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:18 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
9:07 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
9:04 aws windows TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:53 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:50 gcp linux TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
8:48 azure linux TestAccept/bundle/resources/clusters/deploy/simple/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:37 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
8:21 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
8:09 gcp windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
8:01 aws windows TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:56 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:49 aws linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:47 aws linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:31 aws linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:25 azure windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:16 azure windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:14 gcp linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
7:13 aws windows TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:11 azure windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:10 gcp windows TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:09 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
7:07 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
7:01 azure linux TestAccept/bundle/resources/apps/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:55 gcp linux TestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:52 gcp linux TestAccept/bundle/invariant/no_drift/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=
6:42 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:39 gcp windows TestAccept/bundle/resources/clusters/resize-terminated-fallback/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:39 gcp linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:36 aws linux TestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:24 aws windows TestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:23 azure linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:22 gcp linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:18 aws linux TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:16 gcp linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
6:13 aws linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
6:03 aws linux TestAccept/bundle/resources/clusters/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
5:54 aws windows TestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
5:51 gcp windows TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
5:50 aws linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=
5:48 azure linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform/DMS=
5:47 gcp windows TestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct/DMS=true
5:42 azure linux TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct/DMS=
5:37 azure windows TestAccept

Vivek1106-04 pushed a commit to Vivek1106-04/cli that referenced this pull request Sep 23, 2026
…tabricks#6789)

Clearing a genie space's `description` or a secret's `comment` by
removing it from config left the old value in place — the field is
`omitempty`, so it was dropped from the update request and every
subsequent plan re-proposed the change. Force-send both on update (the
same fix databricks#6343 applied to the UC `comment`), and teach the testserver's
genie/secret update handlers to honor an explicit empty value as a clear
rather than treating it as "not provided".

Verified against a real AWS workspace: `UpdateSpace` accepts
`{"description": ""}` and `UpdateSecret` accepts `{"comment": ""}` as
clears, and the `no_drift` invariant's removal cycle (added in databricks#6773)
converges for both. This flips `genie_spaces.description` and
`secrets.comment` from `CANNOT_REMOVE` to `CAN_REMOVE`.

This pull request and its description were written by Isaac.

---------

Co-authored-by: Isaac <no-reply@databricks.com>
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.

3 participants