Skip to content

Wait for app deletion in DoCreate instead of DoDelete - #4176

Merged
andrewnester merged 5 commits into
databricks:mainfrom
varundeepsaini:fix-app-deletion-wait-in-create
Jan 2, 2026
Merged

Wait for app deletion in DoCreate instead of DoDelete#4176
andrewnester merged 5 commits into
databricks:mainfrom
varundeepsaini:fix-app-deletion-wait-in-create

Conversation

@varundeepsaini

@varundeepsainivarundeepsaini commented Dec 29, 2025

Copy link
Copy Markdown
Contributor

Description

Moves app deletion wait from DoDelete to DoCreate, and only retries when appropriate.

Changes

  • On RESOURCE_ALREADY_EXISTS error, check app state via GET before retrying
  • Only retry if the app is in DELETING state or was just deleted (404)
  • Return hard error if app exists in any other state (e.g., ACTIVE)

Why?

  • Handles apps deleted externally (manual deletion), not just via bundle destroy
  • Avoids unnecessary latency in destroy operations
  • Fixes the issue at the point of failure (create, not delete)
  • Prevents infinite retries when app exists and is not being deleted

Follow up to #4102, addresses feedback from #4006.

Comment threadbundle/direct/dresources/app.go Outdated
Comment threadbundle/direct/dresources/app_test.go Outdated
Comment threadbundle/direct/dresources/all_test.go Outdated
@varundeepsaini
varundeepsainiforce-pushed the fix-app-deletion-wait-in-create branch from 5ce6557 to 2459f80CompareDecember 29, 2025 15:33
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Dec 29, 2025

Copy link
Copy Markdown
Collaborator

Commit: 3c7d77a

Run: 20655122774

Env🟨​KNOWN🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws linux928237966124:12
🟨​aws windows143238365923:15
🟨​aws-ucws linux512253253838:02
🟨​aws-ucws windows107253453635:27
🟨​azure linux6153381660127:00
🟨​azure windows1023383658110:53
🟨​azure-ucws linux753528537220:47
🟨​azure-ucws windows123530535221:57
🟨​gcp linux75337066626:08
🟨​gcp windows12337266428:31
21 interesting tests: 18 KNOWN, 2 flaky, 1 SKIP
Test Nameaws linuxaws windowsaws-ucws linuxaws-ucws windowsazure linuxazure windowsazure-ucws linuxazure-ucws windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/deployment/bind/alert🙈​S🙈​S🙈​S🙈​S🟨​K🔄​f🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic💚​R💚​R💚​R💚​R🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=direct💚​R💚​R💚​R💚​R🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=terraform💚​R💚​R💚​R💚​R🔄​f🔄​f🟨​K🟨​K🟨​K🟨​K
🙈​TestAccept/bundle/resources/permissions🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions🟨​K🟨​K🟨​K🟨​K🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions🟨​K🟨​K💚​R💚​R🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R
🔄​TestAccept/bundle/resources/secret_scopes/permissions🔄​f✅​p✅​p✅​p✅​p✅​p✅​p✅​p🙈​s🙈​s
🔄​TestAccept/bundle/resources/secret_scopes/permissions/DATABRICKS_BUNDLE_ENGINE=terraform🔄​f✅​p✅​p✅​p✅​p✅​p✅​p✅​p
🟨​TestExport🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestExportWithFileFlag🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestImportDir💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirDoesNotOverwrite💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirWithOverwriteFlag💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatAuto💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatSource💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
Top 28 slowest tests (at least 2 minutes):
durationenvtestname
8:31azure windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
6:57aws-ucws linuxTestAccept/bundle/resources/synced_database_tables/basic
6:33azure linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
6:26aws-ucws windowsTestAccept/bundle/resources/synced_database_tables/basic
6:12gcp windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:58aws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:26aws-ucws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:25aws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:20aws-ucws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:18aws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:18gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
5:14aws-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
5:13aws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
4:25azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
4:22azure windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:48azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:43azure windowsTestAccept/bundle/deployment/bind/alert
3:10gcp windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
3:09azure linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
3:04azure-ucws windowsTestAccept/bundle/resources/synced_database_tables/basic
2:55azure-ucws linuxTestAccept/bundle/resources/synced_database_tables/basic
2:51azure-ucws windowsTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
2:36aws-ucws windowsTestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=terraform
2:25gcp linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
2:23aws-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform
2:12aws-ucws linuxTestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=terraform
2:09azure-ucws linuxTestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=terraform/UV_PYTHON=3.11
2:00aws-ucws linuxTestAccept/bundle/resources/registered_models/basic/DATABRICKS_BUNDLE_ENGINE=direct

@denikdenik left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @varundeepsaini, looks good. Only have a comment about testing.

Could you also add NEXT_CHANGELOG entry?

Comment threadbundle/direct/dresources/app_test.go Outdated

// TestAppDoCreate_FailsWhenAppExistsAndNotDeleting verifies that DoCreate returns
// a hard error when an app already exists but is NOT in DELETING state.
func TestAppDoCreate_FailsWhenAppExistsAndNotDeleting(t *testing.T) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The two tests above have special logic in the handler, so it makes sense to write them as unit tests. This test can be using standard handlers though, could you rewrite it as acceptance test?

first create app with the same name using databricks cli

$CLI apps create --json '{...}'

then do bundle deploy and observe the error:

musterr $CLI bundle deploy

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

The testserver used to overwrite when an app already exists, i modified it so it returns a 409

@denik

Copy link
Copy Markdown
Contributor

Thanks @varundeepsaini !

@github-actions

Copy link
Copy Markdown
Contributor

An authorized user can trigger integration tests manually by following the instructions below:

Trigger:
go/deco-tests-run/cli

Inputs:

  • PR number: 4176
  • Commit SHA: 3c7d77a448cd88d4846e384a9492ca397c686570

Checks will be approved automatically on success.

@andrewnester
andrewnester added this pull request to the merge queueJan 2, 2026
Merged via the queue into databricks:main with commit 3c597d1Jan 2, 2026
19 checks passed
@varundeepsaini
varundeepsaini deleted the fix-app-deletion-wait-in-create branch January 2, 2026 17:49
@eng-dev-ecosystem-bot

Copy link
Copy Markdown
Collaborator

Commit: 3c597d1

Run: 20661493842

Env❌​FAIL🟨​KNOWN🤯​MISS🔄​flaky💚​RECOVERED🙈​SKIP✅​pass🙈​skipTime
🟨​aws linux1252417647201:37
🟨​aws windows17241964567:25
🟨​aws-ucws linux892586518237:53
❌​aws-ucws windows61342582516111:47
❌​azure linux1275340564695:21
❌​azure windows1512340464499:48
❌​azure-ucws linux134453569516120:00
❌​azure-ucws windows14123570515108:25
🟨​gcp linux785338965595:13
🟨​gcp windows12339965364:26
48 interesting tests: 26 FAIL, 18 KNOWN, 2 flaky, 1 SKIP, 1 MISS
Test Nameaws linuxaws windowsaws-ucws linuxaws-ucws windowsazure linuxazure windowsazure-ucws linuxazure-ucws windowsgcp linuxgcp windows
🟨​TestAccept🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🤯​M🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/deployment/bind/alert🙈​S🙈​S🙈​S🙈​S🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
❌​TestAccept/bundle/integration_whl/interactive_cluster✅​p✅​p✅​p✅​p✅​p❌​F✅​p❌​F🔄​f✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p✅​p❌​F✅​p❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p✅​p❌​F✅​p✅​p🔄​f✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster_dynamic_version✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION✅​p✅​p✅​p✅​p✅​p✅​p✅​p❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER✅​p✅​p✅​p✅​p✅​p❌​F✅​p❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION✅​p✅​p✅​p✅​p❌​F❌​F❌​F✅​p✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_single_user✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F✅​p✅​p
❌​TestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p❌​F❌​F❌​F✅​p🔄​f✅​p
❌​TestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F🔄​f✅​p
🟨​TestAccept/bundle/resources/alerts/basic🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🤯​M🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/alerts/basic/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🤯​M🟨​K🟨​K🟨​K
❌​TestAccept/bundle/resources/clusters/deploy/update-after-create✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F✅​p✅​p
❌​TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p❌​F❌​F✅​p❌​F✅​p✅​p
❌​TestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F✅​p✅​p
❌​TestAccept/bundle/resources/clusters/run/spark_python_task✅​p✅​p✅​p✅​p❌​F❌​F❌​F❌​F🔄​f✅​p
❌​TestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p❌​F❌​F✅​p❌​F✅​p✅​p
❌​TestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p❌​F✅​p❌​F❌​F🔄​f✅​p
🔄​TestAccept/bundle/resources/dashboards/change-serialized-dashboard✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p🔄​f✅​p
🔄​TestAccept/bundle/resources/dashboards/change-serialized-dashboard/DATABRICKS_BUNDLE_ENGINE=direct✅​p✅​p✅​p✅​p✅​p✅​p✅​p✅​p🔄​f✅​p
❌​TestAccept/bundle/resources/database_catalogs/basic🙈​s🙈​s✅​p❌​F🙈​s🙈​s✅​p✅​p🙈​s🙈​s
❌​TestAccept/bundle/resources/database_catalogs/basic/DATABRICKS_BUNDLE_ENGINE=terraform✅​p❌​F✅​p✅​p
🙈​TestAccept/bundle/resources/permissions🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
❌​TestAccept/bundle/resources/permissions/factcheck✅​p✅​p✅​p✅​p✅​p✅​p❌​F✅​p🙈​s🙈​s
❌​TestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform✅​p✅​p✅​p✅​p✅​p✅​p❌​F✅​p
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions🟨​K🟨​K🟨​K🟨​K🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K🟨​K🟨​K
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions🟨​K🟨​K💚​R💚​R🙈​S🙈​S🙈​S🙈​S🙈​S🙈​S
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct🟨​K🟨​K💚​R💚​R
🟨​TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform🟨​K🟨​K💚​R💚​R
❌​TestAccept/bundle/templates/default-python/combinations/serverless✅​p✅​p✅​p❌​F✅​p✅​p✅​p✅​p✅​p✅​p
❌​TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=no/PY=no/READPLAN=🙈​s🙈​s✅​p❌​F🙈​s🙈​s✅​p✅​p🙈​s🙈​s
❌​TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=no/PY=yes/READPLAN=🙈​s🙈​s✅​p❌​F🙈​s🙈​s✅​p✅​p🙈​s🙈​s
❌​TestAccept/bundle/templates/default-python/combinations/serverless/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=yes/PY=yes/READPLAN=🙈​s🙈​s✅​p❌​F🙈​s🙈​s✅​p✅​p🙈​s🙈​s
🤯​TestInprocessMode🙈​s🙈​s🙈​s🙈​s🙈​s🙈​s🤯​M🙈​s🙈​s🙈​s
🟨​TestExport🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestExportWithFileFlag🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K🟨​K
🟨​TestImportDir💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirDoesNotOverwrite💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportDirWithOverwriteFlag💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatAuto💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
🟨​TestImportFileFormatSource💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K💚​R🟨​K
❌​TestUvDownloader✅​p✅​p✅​p✅​p✅​p✅​p❌​F✅​p✅​p✅​p
Top 50 slowest tests (at least 2 minutes):
durationenvtestname
13:39azure-ucws linuxTestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=direct
12:36gcp linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
11:39azure-ucws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
11:17aws-ucws windowsTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform
11:03azure windowsTestAccept/bundle/resources/clusters/run/spark_python_task/DATABRICKS_BUNDLE_ENGINE=terraform
10:41gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
10:14aws-ucws linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
10:06azure-ucws linuxTestAccept/bundle/resources/clusters/deploy/update-after-create/DATABRICKS_BUNDLE_ENGINE=direct
10:01azure-ucws linuxTestSparkJarTaskDeployAndRunOnVolumes/Databricks_Runtime_14.3_LTS
10:01aws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
9:58aws linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
9:52aws-ucws windowsTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=direct
9:52azure linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
9:50azure-ucws windowsTestSparkJarTaskDeployAndRunOnVolumes/Databricks_Runtime_14.3_LTS
9:38gcp windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
9:25gcp windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
9:22aws-ucws linuxTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=terraform
8:37gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
8:31azure windowsTestAccept/bundle/resources/permissions/factcheck/DATABRICKS_BUNDLE_ENGINE=terraform
8:28aws-ucws linuxTestAccept/bundle/resources/model_serving_endpoints/running-endpoint/DATABRICKS_BUNDLE_ENGINE=direct
8:23aws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
8:17aws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
8:14aws-ucws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
8:03aws windowsTestSparkJarTaskDeployAndRunOnWorkspace/Databricks_Runtime_15.4_LTS
7:55azure-ucws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:54azure windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
7:53gcp linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
7:52gcp linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=direct
7:51gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=USER_ISOLATION
7:49aws windowsTestSparkJarTaskDeployAndRunOnWorkspace/Databricks_Runtime_14.3_LTS
7:48gcp linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:45gcp windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct
7:45azure windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:45aws-ucws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:44gcp linuxTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
7:39gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=USER_ISOLATION
7:39azure linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:39aws-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
7:38aws-ucws windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct
7:38aws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:31azure-ucws windowsTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:31gcp linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:28aws-ucws windowsTestAccept/bundle/integration_whl/interactive_cluster/DATABRICKS_BUNDLE_ENGINE=terraform
7:28gcp windowsTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=direct/DATA_SECURITY_MODE=SINGLE_USER
7:27gcp windowsTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=terraform
7:11gcp linuxTestAccept/bundle/integration_whl/interactive_single_user/DATABRICKS_BUNDLE_ENGINE=direct
7:11azure-ucws linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=direct
7:10azure linuxTestAccept/bundle/integration_whl/base/DATABRICKS_BUNDLE_ENGINE=terraform
7:10aws linuxTestAccept/bundle/integration_whl/interactive_cluster_dynamic_version/DATABRICKS_BUNDLE_ENGINE=terraform/DATA_SECURITY_MODE=SINGLE_USER
7:10gcp linuxTestAccept/bundle/run/app-with-job/DATABRICKS_BUNDLE_ENGINE=terraform

deco-sdk-taggingBot added a commit that referenced this pull request Jan 8, 2026
## Release v0.282.0
### Notable Changes
* engine/direct: New plan format (v2) ([#4201](#4201))
### CLI
* Skip non-exportable objects (e.g., `MLFLOW_EXPERIMENT`) during `workspace export-dir` instead of failing ([#4101](#4101))
### Bundles
* Allow `domain_friendly_name` to be used in `name_prefix` in development mode ([#4173](#4173))
* Add missing schema grants privileges ([#4139](#4139))
* Add support for `bundle generate alert` command ([#4108](#4108))
* Add support for `.dbalert.json` files ([#3602](#3602))
* Pass `SYSTEM_TEAMFOUNDATIONCOLLECTIONURI` from env to the Terraform provider for Azure DevOps OIDC auth ([#4169](#4169))
* Add `ipykernel` to the `default` template to enable Databricks Connect notebooks in Cursor/VS Code ([#4164](#4164))
* Add interactive SQL warehouse picker to `default-sql` and `dbt-sql` bundle templates ([#4170](#4170))
* Add `name`, `target` and `mode` fields to the deployment metadata file ([#4180](#4180))
* engine/direct: Fix app deployment failure when app is in `DELETING` state ([#4176](#4176))
* engine/direct: Changes in config that match remote changes no longer trigger an update ([#4201](#4201))
denik added a commit that referenced this pull request May 20, 2026
## Description
Moves app deletion wait from `DoDelete` to `DoCreate`, and only retries
when appropriate.
## Changes
- On `RESOURCE_ALREADY_EXISTS` error, check app state via GET before
retrying
- Only retry if the app is in `DELETING` state or was just deleted (404)
- Return hard error if app exists in any other state (e.g., `ACTIVE`)
## Why?
- Handles apps deleted externally (manual deletion), not just via
`bundle destroy`
- Avoids unnecessary latency in destroy operations
- Fixes the issue at the point of failure (create, not delete)
- Prevents infinite retries when app exists and is not being deleted
Follow up to #4102, addresses feedback from #4006.
---------
Co-authored-by: Denis Bilenko <denis.bilenko@databricks.com>
denik pushed a commit that referenced this pull request May 20, 2026
## Release v0.282.0
### Notable Changes
* engine/direct: New plan format (v2) ([#4201](#4201))
### CLI
* Skip non-exportable objects (e.g., `MLFLOW_EXPERIMENT`) during `workspace export-dir` instead of failing ([#4101](#4101))
### Bundles
* Allow `domain_friendly_name` to be used in `name_prefix` in development mode ([#4173](#4173))
* Add missing schema grants privileges ([#4139](#4139))
* Add support for `bundle generate alert` command ([#4108](#4108))
* Add support for `.dbalert.json` files ([#3602](#3602))
* Pass `SYSTEM_TEAMFOUNDATIONCOLLECTIONURI` from env to the Terraform provider for Azure DevOps OIDC auth ([#4169](#4169))
* Add `ipykernel` to the `default` template to enable Databricks Connect notebooks in Cursor/VS Code ([#4164](#4164))
* Add interactive SQL warehouse picker to `default-sql` and `dbt-sql` bundle templates ([#4170](#4170))
* Add `name`, `target` and `mode` fields to the deployment metadata file ([#4180](#4180))
* engine/direct: Fix app deployment failure when app is in `DELETING` state ([#4176](#4176))
* engine/direct: Changes in config that match remote changes no longer trigger an update ([#4201](#4201))
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.

4 participants

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