You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2021/08/03 08:03:33 UTC
[GitHub] [airflow] SamWheating opened a new pull request #17347: Handle and log exceptions raised during task callback
SamWheating opened a new pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
<!--
Thank you for contributing! Please make sure that your code changes
are covered with tests. And in case of new features or big changes
remember to adjust the documentation.
Feel free to ping committers for the review!
In case of existing issue, reference it using one of the following:
closes: #ISSUE
related: #ISSUE
How to write a good git commit message:
http://chris.beams.io/posts/git-commit/
-->
Currently, an exception thrown in a task-level callback will be unhandled, so potentially important parts of the callback (for example, sending a slack notification after a job failure) may be skipped. This can make it really difficult to identify and fix errors in callbacks.
To demonstrate, here'a a simple DAG with an error in the callback function:
```python
from airflow.models import DAG
from airflow import utils
from airflow.operators.python import PythonOperator
def message():
print('Hello, world.')
def broken_callback(context=None):
print(f"Callback started")
print(f"Task {context['taskID']} finished successfully") # raises keyError
print("Callback complete.")
with DAG(f'dag-with-broken-callback', schedule_interval=None, start_date=utils.dates.days_ago(1), ) as dag2:
task = PythonOperator(
task_id='task',
python_callable=message,
on_success_callback=broken_callback,
)
```
The task execution logs will cut off where the exception is thrown:
```
[2021-07-30, 16:25:44 UTC] {logging_mixin.py:109} INFO - Hello, world.
[2021-07-30, 16:25:44 UTC] {python.py:151} INFO - Done. Returned value was: None
[2021-07-30, 16:25:44 UTC] {taskinstance.py:1144} INFO - Marking task as SUCCESS. dag_id=dag-with-broken-callback, task_id=task, execution_date=20210730T162540, start_date=20210730T162544, end_date=20210730T162544
[2021-07-30, 16:25:44 UTC] {local_task_job.py:151} INFO - Task exited with return code 0
[2021-07-30, 16:25:44 UTC] {logging_mixin.py:109} INFO - Callback started
<nothing>
```
And the unhandled exception will show up in the executor logs:
```
Running <TaskInstance: dag-with-broken-callback.task 2021-07-30T16:25:40.187231+00:00 [queued]> on host 466ea2c2e992
Traceback (most recent call last):
File "/usr/local/bin/airflow", line 33, in <module>
sys.exit(load_entry_point('apache-airflow', 'console_scripts', 'airflow')())
File "/opt/airflow/airflow/__main__.py", line 40, in main
args.func(args)
File "/opt/airflow/airflow/cli/cli_parser.py", line 48, in command
return func(*args, **kwargs)
File "/opt/airflow/airflow/utils/cli.py", line 91, in wrapper
return f(*args, **kwargs)
File "/opt/airflow/airflow/cli/commands/task_command.py", line 256, in task_run
_run_task_by_selected_method(args, dag, ti)
File "/opt/airflow/airflow/cli/commands/task_command.py", line 84, in _run_task_by_selected_method
_run_task_by_local_task_job(args, ti)
File "/opt/airflow/airflow/cli/commands/task_command.py", line 141, in _run_task_by_local_task_job
run_job.run()
File "/opt/airflow/airflow/jobs/base_job.py", line 245, in run
self._execute()
File "/opt/airflow/airflow/jobs/local_task_job.py", line 128, in _execute
self.handle_task_exit(return_code)
File "/opt/airflow/airflow/jobs/local_task_job.py", line 163, in handle_task_exit
self.task_instance._run_finished_callback(error=error)
File "/opt/airflow/airflow/models/taskinstance.py", line 1377, in _run_finished_callback
task.on_success_callback(context)
File "/opt/airflow/dags/test_callback.py", line 10, in broken_callback
print(f"Task {context['taskID']} finished successfully") # raises keyError
KeyError: 'taskID'
[2021-07-30 16:25:45,078] {sequential_executor.py:66} ERROR - Failed to execute task Command '['airflow', 'tasks', 'run', 'dag-with-broken-callback', 'task', '2021-07-30T16:25:40.187231+00:00', '--local', '--pool', 'default_pool', '--subd
ir', '/opt/airflow/dags/test_callback.py']' returned non-zero exit status 1..
[2021-07-30 16:25:45,079] {scheduler_job.py:577} INFO - Executor reports execution of dag-with-broken-callback.task execution_date=2021-07-30 16:25:40.187231+00:00 exited with status failed for try_number 1
[2021-07-30 16:25:45,129] {dagrun.py:435} INFO - Marking run <DagRun dag-with-broken-callback @ 2021-07-30 16:25:40.187231+00:00: manual__2021-07-30T16:25:40.187231+00:00, externally triggered: True> successful
```
By handling this exception and logging it, we can make callback failures much easier to identify and fix. After this change, the task logs look like this:
```
[2021-07-30, 16:26:45 UTC] {logging_mixin.py:109} INFO - Hello, world.
[2021-07-30, 16:26:45 UTC] {python.py:151} INFO - Done. Returned value was: None
[2021-07-30, 16:26:45 UTC] {taskinstance.py:1144} INFO - Marking task as SUCCESS. dag_id=dag-with-broken-callback, task_id=task, execution_date=20210730T162642, start_date=20210730T162645, end_date=20210730T162645
[2021-07-30, 16:26:45 UTC] {local_task_job.py:151} INFO - Task exited with return code 0
[2021-07-30, 16:26:45 UTC] {logging_mixin.py:109} INFO - Callback started
[2021-07-30, 16:26:45 UTC] {taskinstance.py:1357} ERROR - Failed when executing on_success_callback
Traceback (most recent call last):
File "/opt/airflow/airflow/models/taskinstance.py", line 1355, in _run_finished_callback
task.on_success_callback(context)
File "/opt/airflow/dags/test_callback.py", line 10, in broken_callback
print(f"Task {context['taskID']} finished successfully") # raises keyError
KeyError: 'taskID'
[2021-07-30, 16:26:45 UTC] {local_task_job.py:258} INFO - 0 downstream tasks scheduled from follow-on schedule check
```
This removes the stacktrace from the executor logs. If we want to avoid changing this behaviour then we could also re-raise the exception after logging. Thoughts?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-892573706
Closing and reopening to trigger tests
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy closed pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy closed pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r680145422
##########
File path: airflow/models/taskinstance.py
##########
@@ -1343,18 +1343,27 @@ def _run_finished_callback(self, error: Optional[Union[str, Exception]] = None)
if task.on_failure_callback is not None:
context = self.get_template_context()
context["exception"] = error
- task.on_failure_callback(context)
+ try:
+ task.on_failure_callback(context)
+ except Exception:
+ log.exception("Failed when executing execute on_failure_callback:")
elif self.state == State.SUCCESS:
task = self.task
if task.on_success_callback is not None:
context = self.get_template_context()
- task.on_success_callback(context)
+ try:
+ task.on_success_callback(context)
+ except Exception:
Review comment:
Nice. I’m suggesting we have a test for this change
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r681521028
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
Oh, never mind. Use the previous method you used. I will need to work on this in a separate PR so we stop using unittest.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy closed pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy closed pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-892573962
@ashb please take a look
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-892573706
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy closed pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy closed pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] SamWheating commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
SamWheating commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r680267508
##########
File path: airflow/models/taskinstance.py
##########
@@ -1343,18 +1343,27 @@ def _run_finished_callback(self, error: Optional[Union[str, Exception]] = None)
if task.on_failure_callback is not None:
context = self.get_template_context()
context["exception"] = error
- task.on_failure_callback(context)
+ try:
+ task.on_failure_callback(context)
+ except Exception:
+ log.exception("Failed when executing execute on_failure_callback:")
elif self.state == State.SUCCESS:
task = self.task
if task.on_success_callback is not None:
context = self.get_template_context()
- task.on_success_callback(context)
+ try:
+ task.on_success_callback(context)
+ except Exception:
Review comment:
Great suggestion - I've added a test and in doing so I even found a minor bug which has been fixed now.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy closed pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy closed pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] SamWheating commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
SamWheating commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r681810429
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
Ok, is the plan to stop using `unittest` everywhere? I don't mind refactoring the tests in this file, but I'd rather do it in a separate PR.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] github-actions[bot] commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
github-actions[bot] commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-891622980
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.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r682547231
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
Yes. We want to change to using pytest and dag_maker. I'm already working on this file. You can check another one. Thanks @SamWheating
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-891770159
Can you rebase @SamWheating
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r680764255
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
```suggestion
def test_success_callback_handles_and_logs_exception(self, dag_maker):
called = completed = False
def on_success_callable(context):
nonlocal called, completed
called = True
raise KeyError
completed = True
with dag_maker(
'test_success_callback_handles_exception',
end_date=DEFAULT_DATE + datetime.timedelta(days=10),
) :
task = DummyOperator(
task_id='op', email='test@test.test', on_success_callback=on_success_callable
)
dag_maker.create_dagrun()
```
we recently introduced the `dag_maker` fixture so that we can reduce code duplication and also create dagrun whenever we create a dag.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy closed pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy closed pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r682547231
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
Yes. We want to change to using pytest and dag_maker. I'm already working on this file. You can check another one. Thanks @SamWheating
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] SamWheating commented on a change in pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
SamWheating commented on a change in pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#discussion_r681182088
##########
File path: tests/models/test_taskinstance.py
##########
@@ -1743,6 +1743,32 @@ def on_execute_callable(context):
ti.refresh_from_db()
assert ti.state == State.SUCCESS
+ def test_success_callback_handles_and_logs_exception(self):
+ called = completed = False
+
+ def on_success_callable(context):
+ nonlocal called, completed
+ called = True
+ raise KeyError
+ completed = True
+
+ dag = DAG(
+ 'test_success_callback_handles_exception',
+ start_date=DEFAULT_DATE,
+ end_date=DEFAULT_DATE + datetime.timedelta(days=10),
+ )
+ task = DummyOperator(
+ task_id='op', email='test@test.test', on_success_callback=on_success_callable, dag=dag
+ )
Review comment:
Oh, super neat! However, it looks like TestTaskInstance is a subclass of `unitest.Testcase`, which [doesn't seem to support all uses of pytest fixtures](https://docs.pytest.org/en/6.2.x/unittest.html#pytest-features-in-unittest-testcase-subclasses). Is there a reason why some test classes are subclasses of unittest.testcase, and others aren't?
Anyways, I've refactored this test to include all three callback types, but have been having some trouble getting the `dag_maker` fixture to work. Are you able to give me a hand with this?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy merged pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy merged pull request #17347:
URL: https://github.com/apache/airflow/pull/17347
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] ephraimbuddy commented on pull request #17347: Handle and log exceptions raised during task callback
Posted by GitBox <gi...@apache.org>.
ephraimbuddy commented on pull request #17347:
URL: https://github.com/apache/airflow/pull/17347#issuecomment-893714524
@SamWheating please rebase again
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org