Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham
, '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

Make airflow dags test be able to execute Mapped Tasks - #21210

Merged
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor
Feb 4, 2022
Merged

Make airflow dags test be able to execute Mapped Tasks#21210
ashb merged 8 commits into
apache:mainfrom
astronomer:run-mapped-tasks-debug-executor

Conversation

@ashb

@ashbashb commented Jan 29, 2022

Copy link
Copy Markdown
Member

In order to do this there were a few required:

  • The BackfillJob needs to know about mapped tasks, both to expand them, and in order to update it's TI tracking
  • The DebugExecutor, task_command.py, LocalTaskJob needed to "unmap" the mapped task to get the real operator back at the right time.

I was testing this with the following dag:

fromairflowimportDAGfromairflow.decoratorsimporttaskfromairflow.operators.pythonimportPythonOperatorimportpendulum@taskdefmake_list():
returnlist(map(lambdaa: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
defconsumer(*args):
print(repr(args))
withDAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) asdag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())

It can't "unmap" decorated operators successfully yet, so we're using old-school PythonOperator

We also just pass the whole value to the operator, not just the current mapping value(s)


^ Add meaningful description above

Read the Pull Request Guidelines for more information.
In case of fundamental code change, 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 UPDATING.md.

@boring-cyborgboring-cyborgBot added the area:Scheduler including HA (high availability) scheduler label Jan 29, 2022
@ashb

ashb commented Jan 29, 2022

Copy link
Copy Markdown
MemberAuthor

No tests yet -- that's what I'm working on now.

Comment threadairflow/executors/debug_executor.py Outdated
Comment on lines 82 to 83

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.

I wonder if it’d be nicer to also implement unmap() on BaseOperator and have it simply return self.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I made it raise an exception (as it should never be called?) but exist for typing.

I could have it return self and then remove the if task.is_mapped -- WDYT?

@uranusjruranusjrFeb 2, 2022

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.

My OOP training tells me polymorphism is better than an if clause, so my vote goes to return self. But ultimately I guess either makes sense (depending on how your mental model is of the logic).

Comment threadairflow/jobs/backfill_job.py Outdated
Comment threadairflow/models/baseoperator.py Outdated
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from 41d5177 to 083a26cCompareFebruary 2, 2022 13:14
@ashb
ashb marked this pull request as ready for review February 2, 2022 13:22
Comment threadairflow/serialization/serialized_objects.py Outdated
Comment threadairflow/jobs/backfill_job.py Outdated

@uranusjruranusjrFeb 3, 2022

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.

Is this guaranteed (and why?) or just a temporary measure to get pass Mypy?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Temporary for now until we support mapping task groups (the DAG api supports it, but the runtime doesn't yet)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The why: Because expand_mapped_task doesn't exist on BaseOperator, only MappedOperator

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.

Makes sense

@github-actions

Copy link
Copy Markdown
Contributor

The PR most likely needs to run full matrix of tests because it modifies parts of the core of Airflow. However, committers might decide to merge it quickly and take the risk. If they don't merge it quickly - please rebase it to the latest main at your convenience, or amend the last commit of the PR, and push it with --force-with-lease.

@github-actionsgithub-actionsBot added the full tests needed We need to run full set of tests for this PR to merge label Feb 3, 2022
ashband others added 7 commits February 3, 2022 11:35
In order to do this there were two steps required:
- The BackfillJob needs to know about mapped tasks, both to expand them,
and in order to update it's TI tracking
- The DebugExecutor needed to "unmap" the mapped task to get the real
operator bacj
I was testing this with the following dag:
```
from airflow import DAG
from airflow.decorators import task
from airflow.operators.python import PythonOperator
import pendulum
@task
def make_list():
return list(map(lambda a: f'echo "{a!r}"', [1, 2, {'a': 'b'}]))
def consumer(*args):
print(repr(args))
with DAG(dag_id='maptest', start_date=pendulum.DateTime(2022, 1, 18)) as dag:
PythonOperator(task_id='consumer', python_callable=consumer).map(op_args=make_list())
```
It can't "unmap" decorated operators successfully yet, so we're using
old-school PythonOperator
We also just pass the whole value to the operator, not just the current
mapping value(s)
And since TaskGroup is a DAGNode, we don't need to store parent group
directly anymore -- it'll already be stored
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb
ashbforce-pushed the run-mapped-tasks-debug-executor branch from d6b04d7 to c915bebCompareFebruary 3, 2022 11:35
@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Not to self: if you want CI to run a test dag file, it helps if you commit it too.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

A lot of SSH timeouts, and the MSSQL failures.

@uranusjr

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed 😞

@potiuk

Copy link
Copy Markdown
Member

Yeah those SSH things are popping up a lot recently, not sure what had changed disappointed

Yeah. I tried to address it via #21262 and it seemed to help a bit but I believe this is a side effect of some unrelated test, which we should track down and fix.

@ashb

ashb commented Feb 3, 2022

Copy link
Copy Markdown
MemberAuthor

Maybe have had some un-expected luck via #21292 (that, or what ever environmental issue was causing it has vanished)

Comment threadtests/models/__init__.py Outdated
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
@ashb

ashb commented Feb 4, 2022

Copy link
Copy Markdown
MemberAuthor

Right, only SSH failures (which I have a PR open for) so I'm going to merge this now.

@ashb
ashb merged commit 6fc6edf into apache:mainFeb 4, 2022
@ashb
ashb deleted the run-mapped-tasks-debug-executor branch February 4, 2022 14:24
@jedcunninghamjedcunningham added the changelog:skip Changes that should be skipped from the changelog (CI, tests, etc..) label Mar 1, 2022
@jedcunninghamjedcunningham added this to the Airflow 2.3.0 milestone Apr 26, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:dynamic-task-mappingAIP-42area:Schedulerincluding HA (high availability) schedulerchangelog:skipChanges that should be skipped from the changelog (CI, tests, etc..)full tests neededWe need to run full set of tests for this PR to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ashb@uranusjr@potiuk@jedcunningham