You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Deferred DbtCloudRunJobOperator tasks failed within seconds of deferring with a misleading DbtCloudJobRunException: Job run <id> has failed, even though the dbt Cloud job kept running and completed successfully hours later.
What
DbtCloudHook.get_headers_tenants_from_connection() and get_job_details() resolved the connection through the hook's synchronous connection cached_property while running inside the triggerer's live event loop. That
path masks the connection's secret via a synchronous comms call, which asgiref rejects when called from a thread already running an event loop the resulting RuntimeError propagated up through the trigger and was surfaced by the operator as a job failure instead of the real (transient) error it was.
Both call sites now resolve the connection through the existing async safe get_async_connection() helper, sharing a cache slot with the sync connection cached_property so neither path performs a duplicate connection lookup. Also switched the file's Connection type import to the airflow.providers.common.compat.sdk compat shim (matching what get_connection()/get_async_connection() actually return under Airflow 3), which let a stale # type: ignore[return-value] on the connection property be removed.
Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was generative AI tooling used to co-author this PR?
closes: #70398
Why?
Deferred
DbtCloudRunJobOperatortasks failed within seconds of deferring with a misleadingDbtCloudJobRunException: Job run <id> has failed, even though the dbt Cloud job kept running and completed successfully hours later.What
DbtCloudHook.get_headers_tenants_from_connection()andget_job_details()resolved the connection through the hook's synchronousconnectioncached_property while running inside the triggerer's live event loop. Thatpath masks the connection's secret via a synchronous comms call, which
asgirefrejects when called from a thread already running an event loop the resultingRuntimeErrorpropagated up through the trigger and was surfaced by the operator as a job failure instead of the real (transient) error it was.Both call sites now resolve the connection through the existing async safe
get_async_connection()helper, sharing a cache slot with the syncconnectioncached_property so neither path performs a duplicate connection lookup. Also switched the file'sConnectiontype import to theairflow.providers.common.compat.sdkcompat shim (matching whatget_connection()/get_async_connection()actually return under Airflow 3), which let a stale# type: ignore[return-value]on theconnectionproperty be removed.{pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.