Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Reference asset events from asset_dag_run_queue - #70972

Merged
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c
Aug 5, 2026
Merged

Reference asset events from asset_dag_run_queue#70972
uranusjr merged 1 commit into
apache:mainfrom
astronomer:explore/asset-registration-atomicity-option-c

Conversation

@uranusjr

Copy link
Copy Markdown
Member

More details in #70970.

Asset-triggered scheduling had the scheduler reconstruct which AssetEvents fed a run from a created_at time window. The prior fix#62501 committed each AssetEvent in separate short-lived sessions so it was visible early, but that broke atomicity.

This commit changes the ADRQ to directly reference the asset event that generates it, instead of using an implicit asset_id + timestamp combination. Atomicity is restored since we no longer needs to commit separately to get the timestamps right, while still being able to reference the correct asset events from the ADRQ.

@boring-cyborgboring-cyborgBot added area:API Airflow's REST/HTTP API area:db-migrations PRs with DB migration area:Scheduler including HA (high availability) scheduler kind:documentation labels Aug 3, 2026
@uranusjruranusjr added this to the Airflow 3.4.0 milestone Aug 3, 2026
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from fc8d415 to 7a06763CompareAugust 3, 2026 12:40
@dingo4dev

Copy link
Copy Markdown
Contributor

@uranusjr Thank you for this follow-up fix. Moving ADRQ to reference AssetEvent directly resolves the race I hit in #62501 while restoring transaction atomicity. I really appreciate the careful implementation and quick turnaround.

Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/models/asset.py
Comment threadairflow-core/src/airflow/assets/manager.py Outdated
Comment threadairflow-core/src/airflow/jobs/scheduler_job_runner.py
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch 2 times, most recently from 673bdbd to c3ca4d1CompareAugust 4, 2026 08:18
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c3ca4d1 to c0d809aCompareAugust 4, 2026 09:15
@uranusjr

Copy link
Copy Markdown
MemberAuthor

Special note: This SHOULD NOT be backported.

@Lee-WLee-W left a comment

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.

a few nits

Comment threadairflow-core/docs/howto/usage-cli.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/newsfragments/70972.significant.rst Outdated
Comment threadairflow-core/tests/unit/assets/test_manager.py Outdated
Asset-triggered scheduling had the scheduler reconstruct which
AssetEvents fed a run from a created_at time window. The prior fix
9e5b770 committed each AssetEvent in separate short-lived sessions
so it was visible early, but that broke atomicity.
This commit changes the ADRQ to directly reference the asset event that
generates it, instead of using an implicit asset_id + timestamp
combination. Atomicity is restored since we no longer needs to commit
separately to get the timestamps right, while still being able to
reference the correct asset events from the ADRQ.
@uranusjr
uranusjrforce-pushed the explore/asset-registration-atomicity-option-c branch from c0d809a to bece6e3CompareAugust 4, 2026 11:22
@uranusjr
uranusjr merged commit 44acf38 into apache:mainAug 5, 2026
166 of 168 checks passed
@uranusjr
uranusjr deleted the explore/asset-registration-atomicity-option-c branch August 5, 2026 01:13
dabla pushed a commit to dabla/airflow that referenced this pull request Aug 14, 2026
cursorBot pushed a commit to Vamsi-klu/airflow that referenced this pull request Aug 24, 2026
apache#70972 already consumes queued asset events by id, so concurrent mapped
outlets no longer strand events behind a timestamp watermark. These
tests lock that contract for mapped producers so a later consume-path
change cannot silently drop events from triggering_asset_events.
closes: apache#54659
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:db-migrationsPRs with DB migrationarea:Schedulerincluding HA (high availability) schedulerkind:documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@uranusjr@dingo4dev@Lee-W@kaxil