Skip to content

direct: Fix perpetual update on grants with ALL_PRIVILEGES - #6064

Merged
denik merged 9 commits into
mainfrom
denik/grants-issue-6030
Jul 27, 2026
Merged

direct: Fix perpetual update on grants with ALL_PRIVILEGES#6064
denik merged 9 commits into
mainfrom
denik/grants-issue-6030

Conversation

@denik

@denikdenik commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Changes

When a principal is granted ALL_PRIVILEGES, normalizeAssignments collapses its privilege list down to just ALL_PRIVILEGES, on both the config side and the value read back from the backend, so the two compare equal.

Why

Fixes#6030. On the direct engine bundle plan reported update on every catalog/schema/volume .grants sub-resource that granted ALL_PRIVILEGES: the backend reports ALL_PRIVILEGES plus the concrete privileges it implies, which never matched the config's lone ALL_PRIVILEGES, and the deploy never converged.

Tests

New acceptance test grants/schemas/all_privileges_coexist (local + cloud, both engines); verified on aws-prod-ucws.

denik added 3 commits July 24, 2026 17:54
buildGrantChanges now computes a per-principal add/remove diff against
remote state (Add = desired - remote, Remove = remote - desired) like the
terraform provider's diffPermissions, instead of sending a blanket
"remove ALL_PRIVILEGES" to wipe each principal. This lets a principal
granted ALL_PRIVILEGES converge when the backend also reports concrete
privileges for it, instead of reporting update forever (#6030).
Also normalize privileges (uppercase, spaces to underscores) and sort them
on both the config and read sides so grants do not drift on case or order,
and update the grants testserver to mirror that backend behaviour.
Revert the per-principal grant diff and keep the original buildGrantChanges
(ALL_PRIVILEGES still wipes other privileges). Instead fix the false drift at
comparison time: normalizeAssignments collapses a principal holding
ALL_PRIVILEGES down to just ALL_PRIVILEGES on both the config and read sides,
so config granting only ALL_PRIVILEGES matches a backend that also reports the
concrete privileges it implies (#6030).
MergeGrants deduplicates the raw config strings before normalization, so
distinct spellings of the same privilege (e.g. "use schema" and "USE_SCHEMA")
only collide once normalizeAssignments canonicalizes them. Compact after
sorting so the config side does not keep a duplicate the backend read side
never returns, which would otherwise cause perpetual drift.
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: ae25828

Run: 30276613010

Env🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
💚​aws linux4432510617:29
🔄​aws windows24432510597:07
💚​azure linux4432510608:16
💚​azure windows4432710587:28
💚​gcp linux1532410628:52
💚​gcp windows15326106010:48
10 interesting tests: 4 RECOVERED, 4 SKIP, 2 flaky
Test Nameaws linuxaws windowsazure linuxazure windowsgcp linuxgcp 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
🔄​TestFsCpDirToDirFileNotOverwritten✅​p🔄​f✅​p✅​p✅​p✅​p
🔄​TestFsCpDirToDirFileNotOverwritten/dbfs_to_uc-volumes✅​p🔄​f✅​p✅​p✅​p✅​p
💚​TestFetchRepositoryInfoAPI_FromRepo💚​R💚​R💚​R💚​R🙈​S🙈​S
💚​TestFetchRepositoryInfoAPI_FromRepo/root💚​R💚​R💚​R💚​R
💚​TestFetchRepositoryInfoAPI_FromRepo/subdir💚​R💚​R💚​R💚​R
Top 11 slowest tests (at least 2 minutes):
durationenvtestname
6:56gcp windowsTestAccept
4:32azure windowsTestAccept
4:28aws windowsTestAccept
3:39gcp windowsTestAccept/bundle/resources/grants/schemas/all_privileges_coexist/DATABRICKS_BUNDLE_ENGINE=terraform
2:57azure linuxTestAccept
2:51gcp linuxTestAccept
2:49aws linuxTestAccept
2:42azure windowsTestAccept/bundle/resources/grants/schemas/all_privileges_coexist/DATABRICKS_BUNDLE_ENGINE=terraform
2:28gcp windowsTestAccept/bundle/resources/grants/schemas/all_privileges_coexist/DATABRICKS_BUNDLE_ENGINE=direct
2:06gcp linuxTestAccept/bundle/resources/grants/schemas/all_privileges_coexist/DATABRICKS_BUNDLE_ENGINE=terraform
2:04gcp linuxTestFilerWorkspaceFilesExtensionsReadDir

denik added 6 commits July 26, 2026 10:17
The readplan grants-remove-principal golden was left with the reverted
set-diff request shape; regenerate it to match the current output where
each principal is sent with remove:[ALL_PRIVILEGES].
# Conflicts:
#	acceptance/bundle/invariant/test.toml
Main added the delete_idempotent and destroy_idempotent invariant tests; they
inherit the shared INPUT_CONFIG matrix, so their out.test.toml must list the
new grants_privilege_normalization config too.
Drop the privilege case/ordering normalization (uppercase, space-to-underscore,
dedupe, testserver random order, invariant config) from this PR: the reporter's
plan showed the drift is purely ALL_PRIVILEGES coexistence, and both AWS and
Azure already return privileges uppercased and sorted, so that normalization is
speculative. Keep only normalizeAssignments sorting + collapsing ALL_PRIVILEGES,
which is what #6030 needs. The dropped work is preserved on the
denik/grants-normalization branch for a follow-up.
Match the repo convention "Fixes [#issue] ... ([#pr])": link the fixed issue
up front and the PR as the trailing token.
Add a second deploy + plan so the test proves both engines converge to no
changes, not just that their first plan differs.
@denik
denik added this pull request to the merge queueJul 27, 2026
Merged via the queue into main with commit b355f7dJul 27, 2026
26 checks passed
@denik
denik deleted the denik/grants-issue-6030 branch July 27, 2026 16:00
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: b355f7d

Run: 30282762004

Env❌​FAIL🟨​KNOWN💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
❌​aws linux80033235688115:24
❌​aws windows73733235890023:11
❌​azure linux70133235091714:36
❌​azure windows63833235293620:31
❌​gcp linux6623337792327:14
❌​gcp windows6263335294224:40
811 interesting tests: 803 FAIL, 3 KNOWN, 3 RECOVERED, 2 SKIP
Test Nameaws linuxaws windowsazure linuxazure windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
❌​TestAccept/bundle/apps/compute_size❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/apps/compute_size/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/apps/compute_size/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F✅​p❌​F
❌​TestAccept/bundle/apps/job_permissions❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/apps/job_permissions/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/cli_defaults❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/cli_defaults/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/config_edits❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/config_edits/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/dashboard_etag❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/dashboard_etag/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/flushed_cache❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/flushed_cache/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/formatting_preserved❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/formatting_preserved/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_fields❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_fields/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_multiple_tasks❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_multiple_tasks/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_params_variables❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_params_variables/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_pipeline_task❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/job_pipeline_task/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/multiple_files❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/multiple_files/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/multiple_resources❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/multiple_resources/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/output_json❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/output_json/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/output_no_changes❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/output_no_changes/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/pipeline_fields❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/pipeline_fields/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/policy_injected_cluster_fields/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/resolve_variables❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/resolve_variables/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/select_basic❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/select_basic/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/select_multiple❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/select_multiple/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/skip_permissions❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/skip_permissions/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/target_override❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/target_override/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/config-remote-sync/task_rename_revert❌​F🙈​s❌​F🙈​s❌​F🙈​s
❌​TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F✅​p
❌​TestAccept/bundle/config-remote-sync/task_rename_revert/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/empty-bundle❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/empty-bundle/DATABRICKS_BUNDLE_ENABLE_EXPERIMENTAL_YAML_SYNC=true/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/files/no-snapshot-sync❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/files/no-snapshot-sync/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/mlops-stacks❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/mlops-stacks/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/snapshot-comparison❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/snapshot-comparison/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/spark-jar-task❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deploy/spark-jar-task/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/alert❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/alert/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/catalog❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/catalog/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/cluster❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/cluster/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard/recreation❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/dashboard/recreation/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/experiment❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/experiment/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/generate-and-bind❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/generate-and-bind/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-abort-bind❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-abort-bind/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-spark-python-task❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/job/job-spark-python-task/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/model-serving-endpoint❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/model-serving-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/pipelines/recreate❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/pipelines/recreate/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/registered-model❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/registered-model/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/schema❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/schema/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/secret-scope❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/secret-scope/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/vector_search_endpoint❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/vector_search_endpoint/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/volume❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/volume/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/bind/volume/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/grants❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/grants/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/grants/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/permissions❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/permissions/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/deployment/unbind/permissions/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/destroy/jobs-and-pipeline❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/destroy/jobs-and-pipeline/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/destroy/jobs-and-pipeline/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/auto-bind❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/auto-bind/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/pipeline_and_deploy❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/pipeline_and_deploy/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/pipeline_and_deploy/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/python_job_and_deploy❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/python_job_and_deploy/DATABRICKS_BUNDLE_ENGINE=direct❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/generate/python_job_and_deploy/DATABRICKS_BUNDLE_ENGINE=terraform❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=app.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=experiment.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_for_each_task.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_task_cluster.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_pydabs_10_tasks.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_depends_on.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_with_task.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=model_serving_endpoint.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=pipeline_apply_policy_default_values.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=registered_model.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_empty_grants.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=schema_uppercase_name.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=secret_scope.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=secret_scope_default_backend_type.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=sql_warehouse.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=volume.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/continue_293/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=volume_uppercase_name.yml.tmpl❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=app.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=app.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=catalog.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F✅​p❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=dashboard.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=experiment.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=experiment.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=genie_space.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=instance_pool.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_for_each_task.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_for_each_task.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_job_cluster.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_task_cluster.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_apply_policy_default_values_task_cluster.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_cross_resource_ref.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_cross_resource_ref.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN=❌​F❌​F❌​F❌​F❌​F❌​F
❌​TestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=job_permission_ref.yml.tmpl/READPLAN=1❌​F❌​F❌​F❌​F❌​F❌​F
Top 9 slowest tests (at least 2 minutes):
durationenvtestname
9:29gcp linuxTestAccept/bundle/resources/clusters/lifecycle-started/DATABRICKS_BUNDLE_ENGINE=direct
8:46gcp linuxTestAccept/bundle/resources/clusters/deploy/local_ssd_count/DATABRICKS_BUNDLE_ENGINE=direct
4:52gcp linuxTestAccept/bundle/resources/apps/lifecycle-started-toggle/DATABRICKS_BUNDLE_ENGINE=direct
4:24gcp linuxTestAccept/bundle/resources/apps/lifecycle-started-omitted/DATABRICKS_BUNDLE_ENGINE=direct
3:14gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:11gcp linuxTestAccept/bundle/resources/clusters/deploy/data_security_mode/DATABRICKS_BUNDLE_ENGINE=direct
2:37gcp linuxTestAccept/bundle/resources/clusters/deploy/simple/DATABRICKS_BUNDLE_ENGINE=direct
2:26gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
2:19gcp linuxTestAccept/bundle/invariant/delete_idempotent/DATABRICKS_BUNDLE_ENGINE=direct/INPUT_CONFIG=cluster_apply_policy_default_values.yml.tmpl/READPLAN=1
(606 table rows omitted to keep the report under 60000 bytes)

deco-sdk-taggingBot added a commit that referenced this pull request Jul 29, 2026
## Release v1.10.0
### CLI
* `ssh connect` now supports specifying a serverless usage policy with `--usage-policy-id`
### Bundles
* Fixed `bundle deploy`/`bundle destroy` failing when an app enters the transient DELETING state between plan and apply (e.g. with a saved plan); the delete is now treated as complete instead of erroring (direct engine only).
* Fixed `bundle deploy`/`bundle destroy` failing when an app is still in the transient DELETING state; the delete is now treated as complete instead of erroring (direct engine only).
* `bundle destroy --force-lock` now proceeds without a deployment lock when the workspace directory is at its child-node limit and cannot accept the lock file, so a deployment can still be torn down when the workspace is full.
* Empty-string values on optional (omitempty) resource fields are now dropped before deployment instead of being sent to the backend. This fixes deploys failing with errors like `'' is not a valid cluster policy ID` when a field such as `policy_id` was set to `""` (often via a variable that resolved to an empty string). The behavior now matches between the terraform and direct engines and is reflected in `bundle validate -o json`.
* `bundle validate` and `bundle deploy` now reject a grant that is missing a `principal` with an error instead of a warning. Previously the deploy would start and, on the direct engine, create the securable before the grants PATCH failed (`400 INVALID_PARAMETER_VALUE`), leaving a partially-applied deployment.
* `bundle validate` and `bundle deploy` now reject a grant with an empty `privileges` list with an error. Previously, on the direct engine, such a grant never converged: the backend drops principals with no privileges, so every subsequent `bundle plan` reported the grant as a perpetual update.
* Fixes [#6030](#6030): spurious `update` on catalog/schema/volume grants (direct engine); a principal granted `ALL_PRIVILEGES` no longer drifts when the backend also reports the concrete privileges it implies ([#6064](#6064)).
* Use vector search endpoint permission types that are supported by the backend ([#6022](#6022)).
### Dependency Updates
* Bump `github.com/databricks/databricks-sdk-go` from v0.160.0 to v0.165.0.
* Upgrade Terraform provider to 1.123.0
Sign up for freeto 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.

bundle plan perpetually reports update on catalog/schema/volume .grants sub-resources even when live state is confirmed converged

3 participants

@denik@eng-dev-ecosystem-bot@andrewnester