Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Bugfix: Move rendering of `map_index_template` so it renders for failed tasks as long as it was defined before the point of failure by TJaniF · Pull Request #38902 · apache/airflow · GitHub
Skip to content

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

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

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure - #38902

Merged
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix
Apr 15, 2024
Merged

Bugfix: Move rendering of map_index_template so it renders for failed tasks as long as it was defined before the point of failure#38902
Lee-W merged 20 commits into
apache:mainfrom
TJaniF:custom_index_fix

Conversation

@TJaniF

Copy link
Copy Markdown
Contributor

In Airflow 2.9 map_index_template does not render when the task fails.

image

I moved the rendering into the finally of _execute_callable so it always happens.

TaskFlow:
image

Traditional operator:
image

Also attempted 2 unit tests :)

Apologies if there is already a PR addressing this. I did not see one.

cc: @RNHTTR


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@TJaniF
TJaniF marked this pull request as ready for review April 10, 2024 15:20
@eladkaleladkal added this to the Airflow 2.9.1 milestone Apr 10, 2024
@eladkaleladkal added the type:bug-fix Changelog: Bug Fixes label Apr 10, 2024

@RNHTTRRNHTTR 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.

Nice! Thanks for cleaning up my mess :)

@RNHTTR
RNHTTR requested a review from uranusjrApril 10, 2024 21:48
Comment threadairflow/models/taskinstance.py Outdated

@uranusjruranusjr 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.

Need to fix tests

@uranusjr

Copy link
Copy Markdown
Member

This should fix things…

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@uranusjr thank you!

Comment threadairflow/models/taskinstance.py Outdated
@Lee-W
Lee-W self-requested a review April 12, 2024 11:19
@pankajkoti
pankajkoti requested a review from ashbApril 15, 2024 09:14
@Lee-W
Lee-W merged commit 456ec48 into apache:mainApr 15, 2024
jedcunningham pushed a commit that referenced this pull request Apr 26, 2024
…ed tasks as long as it was defined before the point of failure (#38902)
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
(cherry picked from commit 456ec48)
@rightx2

rightx2 commented May 28, 2024

Copy link
Copy Markdown

I wonder what I've experienced is same type of the problem above:

  1. clear dynnamic mapped tasks in a dag run
  2. all dynamic mapped tasks go into state of running
  3. Force to set dynmaic task box(or dag run) state success (mark state as success)

In this case, all map_index values are integer, instead of given names.

Screenshot 2024-05-28 at 3 53 31 PM

@TJaniF

Copy link
Copy Markdown
ContributorAuthor

@rightx2 That is interesting. I just tried that and for me the map index values from the first run "stick", but maybe I misunderstood what you are doing :)

This is what I tried:

2024-05-28_10-24-49 (1)

This is the DAG:

fromairflow.decoratorsimportdag, task@dag(start_date=None,schedule=None,catchup=False,)defmapping_test():
@task(map_index_template="{{ custom_map_index }}" )defadd_one(num):
importtimeifnum>10:
time.sleep(10)
else:
time.sleep(2)
fromairflow.operators.pythonimportget_current_contextcontext=get_current_context()
context["custom_map_index"] ="Input x="+str(num)
returnnum+1add_one.expand(num=[1, 2, 3, 4, 5, 10, 11, 12, 13])
mapping_test()

I'm using Airflow 2.9.1 (Astro Runtime 11.3.0)

@rightx2

Copy link
Copy Markdown

@TJaniF

I think there was a mistake in my experiment. I believe I can clarify it now.

  1. For whole newly added dynamic tasks:

    • When I start running dyanmic tasks for the first time and stop them immediately (marking them as success or failed, before they finish), all map_index values are integers.
  2. For newly added individual tasks within pre-existing dynamic tasks:

    • Similarly, if I clear the tasks this time and stop them, only the map_index of the newly added individual task is an integer.

@TJaniF

TJaniF commented May 30, 2024

Copy link
Copy Markdown
ContributorAuthor

@rightx2 Thanks for the added explanation. I understand what you mean now and can reproduce it, marking as success (or as failed) will lead to an integer index even if the code to define the custom map index has already run. Thanks for flagging this!

@RNHTTR I think it would be nice if it worked for marking tasks the same way as for failed tasks with attempting to render the custom map index template even if interrupted. :)
If you agree I can open an issue and/or take a stab at it, though I can't promise that will happen soonish, am working on some other things rn 😅

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42type:bug-fixChangelog: Bug Fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

11 participants

@TJaniF@uranusjr@rightx2@ashb@Lee-W@sunank200@kaxil@pankajkoti@RNHTTR@phanikumv@eladkal