Fix DbtCloudRunJobOperator having false failures during deferred polling - #70581
Merged
amoghrajesh merged 2 commits intoJul 30, 2026
Merged
Conversation
amoghrajesh
requested review from
Lee-W,
eladkal,
jason810496,
kaxil,
pankajastro,
pankajkoti,
potiuk and
shahar1
July 28, 2026 08:48
eladkal
approved these changes
Jul 28, 2026
Lee-W
reviewed
Jul 28, 2026
Lee-W
approved these changes
Jul 30, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.