Today I had an issue where my operator caught the SIGTERM exception that
Airflow throws. It seems to me that Airflow shouldn't be throwing a SIGTERM
exception that subclasses Exception, particular as in arbitrary Python
functions this might happen commonly.
The code in my operator looked like this:
try:
optimistic_function()
except Exception:
self.log.exception('Optimistic function failed: ')
When I terminated the task instance early in the Airflow GUI the exception was
caught and the task carried on as normal:
[2019-10-02 15:10:39,153] {my_operators.py:415} ERROR - Something went wrong
with checksum validation:
Traceback (most recent call last):
...
File ".../python3.7/site-packages/airflow/models/__init__.py", line 1418, in
signal_handler
raise AirflowException("Task received SIGTERM signal")
airflow.exceptions.AirflowException: Task received SIGTERM signal
[2019-10-02 15:10:39,177] {my_operators.py:428} INFO - Carrying on with the
operator like everything is good
The above is from Airflow 1.10.3, on master branch the signal_handler code is
located here:
https://github.com/apache/airflow/blob/d719e1fd6705a93a0dfefef4b46478ade5e006ea/airflow/models/taskinstance.py#L898
And the exception it throws is located here:
https://github.com/apache/airflow/blob/d719e1fd6705a93a0dfefef4b46478ade5e006ea/airflow/exceptions.py#L25
It seems to me that if Airflow is throwing an exception with the intent to kill
the Python process it should be subclassing "SystemExit" not "Exception":
https://docs.python.org/3/library/exceptions.html#exception-hierarchy . In the
mean time I will rewrite my code for special handling when receiving
AirflowException.
Would everyone agree in general this is a bug or am I missing some use case?
Damian
===============================================================================
Please access the attached hyperlink for an important electronic communications
disclaimer:
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
===============================================================================