Skip to content

execution_timeout=None breaks scheduler when default_task_execution_timeout is set #48698

Description

@arollet22

Apache Airflow version

2.10.5

If "Other Airflow 2 version" selected, which one?

No response

What happened?

After setting the Airflow configuration "default_task_execution_timeout" to a value (tried with 30 and 86400), DAGs containing the parameter "execution_timeout=None" break the DAG view initially although the DAG is present in the home page and seems to be correctly loaded in the DAG bag. When a DAG run gets created, it completely breaks the scheduler process.

What you think should happen instead?

You should be able to set a default_task_execution_timeout and let users override it with a None value, or at least do not make it break the scheduler.

How to reproduce

Tested locally with Airflow 2.10.5 standalone (after production issue on MWAA 2.9.2).

Extract of Airflow.cfg used:

# The default task execution_timeout value for the operators. Expected an integer value to
# be passed into timedelta as seconds. If not specified, then the value is considered as None,
# meaning that the operators are never timed out by default.
#
# Variable: AIRFLOW__CORE__DEFAULT_TASK_EXECUTION_TIMEOUT
#
default_task_execution_timeout = 86400

Example DAG that breaks the scheduler:

from datetime import datetime

from airflow import DAG
from airflow.operators.python import PythonOperator

# dag definition:
with DAG(
    dag_id="execution_timeout_failure",
    start_date=datetime(2024, 10, 10,),
    schedule_interval="6 16 * * *", # set it such that a dag run gets created soon after you can change config
    catchup=False,
) as dag:

    hello_world = PythonOperator(
        task_id='hello_world',
        python_callable=lambda: print("Hello World"),
        # execution_timeout=None # uncomment this line after updating airflow.cfg
    )

Operating System

macOS 15.3.1 (24D70)

Versions of Apache Airflow Providers

No response

Deployment

Virtualenv installation

Deployment details

No response

Anything else?

webserver logs when trying to access the DAG view
webserver  | [2025-04-02T18:04:27.478+0200] {app.py:1744} ERROR - Exception on /dags/execution_timeout_failure/grid [GET]
webserver  | Traceback (most recent call last):
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/flask/app.py", line 2529, in wsgi_app
webserver  | response = self.full_dispatch_request()
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/flask/app.py", line 1825, in full_dispatch_request
webserver  | rv = self.handle_user_exception(e)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/flask/app.py", line 1823, in full_dispatch_request
webserver  | rv = self.dispatch_request()
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/flask/app.py", line 1799, in dispatch_request
webserver  | return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/www/auth.py", line 250, in decorated
webserver  | return _has_access(
webserver  | ^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/www/auth.py", line 163, in _has_access
webserver  | return func(*args, **kwargs)
webserver  | ^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/www/decorators.py", line 198, in view_func
webserver  | return f(*args, **kwargs)
webserver  | ^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/session.py", line 97, in wrapper
webserver  | return func(*args, session=session, **kwargs)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/www/views.py", line 2920, in grid
webserver  | dag = get_airflow_app().dag_bag.get_dag(dag_id, session=session)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/session.py", line 94, in wrapper
webserver  | return func(*args, **kwargs)
webserver  | ^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 221, in get_dag
webserver  | self._add_dag_from_db(dag_id=dag_id, session=session)
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 303, in _add_dag_from_db
webserver  | dag = row.dag
webserver  | ^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/serialized_dag.py", line 235, in dag
webserver  | return SerializedDAG.from_dict(data)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1785, in from_dict
webserver  | return cls.deserialize_dag(serialized_obj["dag"])
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1697, in deserialize_dag
webserver  | deser = SerializedBaseOperator.deserialize_operator(obj[Encoding.VAR])
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1436, in deserialize_operator
webserver  | cls.populate_operator(op, encoded_op)
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1300, in populate_operator
webserver  | v = cls._deserialize_timedelta(v)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 910, in _deserialize_timedelta
webserver  | return datetime.timedelta(seconds=seconds)
webserver  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
webserver  | TypeError: unsupported type for timedelta seconds component: NoneType
scheduler logs when a DAG run is triggered
scheduler  | [2025-04-02T18:06:02.272+0200] {scheduler_job_runner.py:1016} ERROR - Exception when executing SchedulerJob._run_scheduler_loop
scheduler  | Traceback (most recent call last):
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 999, in _execute
scheduler  | self._run_scheduler_loop()
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1138, in _run_scheduler_loop
scheduler  | num_queued_tis = self._do_scheduling(session)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1244, in _do_scheduling
scheduler  | self._create_dagruns_for_dags(guard, session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/retries.py", line 93, in wrapped_function
scheduler  | for attempt in run_with_db_retries(max_retries=retries, logger=logger, **retry_kwargs):
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 435, in __iter__
scheduler  | do = self.iter(retry_state=retry_state)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 368, in iter
scheduler  | result = action(retry_state)
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 390, in <lambda>
scheduler  | self._add_action_func(lambda rs: rs.outcome.result())
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/opt/homebrew/Cellar/python@3.11/3.11.10/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 449, in result
scheduler  | return self.__get_result()
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/opt/homebrew/Cellar/python@3.11/3.11.10/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
scheduler  | raise self._exception
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/retries.py", line 102, in wrapped_function
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1318, in _create_dagruns_for_dags
scheduler  | self._create_dag_runs(non_dataset_dags, session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/traces/tracer.py", line 58, in wrapper
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1353, in _create_dag_runs
scheduler  | dag = self.dagbag.get_dag(dag_model.dag_id, session=session)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/session.py", line 94, in wrapper
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 221, in get_dag
scheduler  | self._add_dag_from_db(dag_id=dag_id, session=session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 303, in _add_dag_from_db
scheduler  | dag = row.dag
scheduler  | ^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/serialized_dag.py", line 235, in dag
scheduler  | return SerializedDAG.from_dict(data)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1785, in from_dict
scheduler  | return cls.deserialize_dag(serialized_obj["dag"])
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1697, in deserialize_dag
scheduler  | deser = SerializedBaseOperator.deserialize_operator(obj[Encoding.VAR])
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1436, in deserialize_operator
scheduler  | cls.populate_operator(op, encoded_op)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1300, in populate_operator
scheduler  | v = cls._deserialize_timedelta(v)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 910, in _deserialize_timedelta
scheduler  | return datetime.timedelta(seconds=seconds)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | TypeError: unsupported type for timedelta seconds component: NoneType
scheduler  | [2025-04-02T18:06:03.308+0200] {process_utils.py:132} INFO - Sending 15 to group 79173. PIDs of all processes in the group: [79173]
scheduler  | [2025-04-02T18:06:03.308+0200] {process_utils.py:87} INFO - Sending the signal 15 to group 79173
scheduler  | [2025-04-02T18:06:03.610+0200] {process_utils.py:80} INFO - Process psutil.Process(pid=79173, status='terminated', exitcode=0, started='18:01:49') (79173) terminated with exit code 0
scheduler  | [2025-04-02T18:06:03.611+0200] {scheduler_job_runner.py:1029} INFO - Exited execute loop
scheduler  | Traceback (most recent call last):
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/bin/airflow", line 8, in <module>
scheduler  | sys.exit(main())
scheduler  | ^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/__main__.py", line 62, in main
scheduler  | args.func(args)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/cli/cli_config.py", line 49, in command
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/cli.py", line 116, in wrapper
scheduler  | return f(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/providers_configuration_loader.py", line 55, in wrapped_function
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/cli/commands/scheduler_command.py", line 56, in scheduler
scheduler  | run_command_with_daemon_option(
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/cli/commands/daemon_utils.py", line 86, in run_command_with_daemon_option
scheduler  | callback()
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/cli/commands/scheduler_command.py", line 59, in <lambda>
scheduler  | callback=lambda: _run_scheduler_job(args),
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/cli/commands/scheduler_command.py", line 47, in _run_scheduler_job
scheduler  | run_job(job=job_runner.job, execute_callable=job_runner._execute)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/session.py", line 97, in wrapper
scheduler  | return func(*args, session=session, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/job.py", line 421, in run_job
scheduler  | return execute_job(job, execute_callable=execute_callable)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/job.py", line 450, in execute_job
scheduler  | ret = execute_callable()
scheduler  | ^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 999, in _execute
scheduler  | self._run_scheduler_loop()
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1138, in _run_scheduler_loop
scheduler  | num_queued_tis = self._do_scheduling(session)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1244, in _do_scheduling
scheduler  | self._create_dagruns_for_dags(guard, session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/retries.py", line 93, in wrapped_function
scheduler  | for attempt in run_with_db_retries(max_retries=retries, logger=logger, **retry_kwargs):
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 435, in __iter__
scheduler  | do = self.iter(retry_state=retry_state)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 368, in iter
scheduler  | result = action(retry_state)
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/tenacity/__init__.py", line 390, in <lambda>
scheduler  | self._add_action_func(lambda rs: rs.outcome.result())
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/opt/homebrew/Cellar/python@3.11/3.11.10/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 449, in result
scheduler  | return self.__get_result()
scheduler  | ^^^^^^^^^^^^^^^^^^^
scheduler  | File "/opt/homebrew/Cellar/python@3.11/3.11.10/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
scheduler  | raise self._exception
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/retries.py", line 102, in wrapped_function
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1318, in _create_dagruns_for_dags
scheduler  | self._create_dag_runs(non_dataset_dags, session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/traces/tracer.py", line 58, in wrapper
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/jobs/scheduler_job_runner.py", line 1353, in _create_dag_runs
scheduler  | dag = self.dagbag.get_dag(dag_model.dag_id, session=session)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/utils/session.py", line 94, in wrapper
scheduler  | return func(*args, **kwargs)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 221, in get_dag
scheduler  | self._add_dag_from_db(dag_id=dag_id, session=session)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/dagbag.py", line 303, in _add_dag_from_db
scheduler  | dag = row.dag
scheduler  | ^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/models/serialized_dag.py", line 235, in dag
scheduler  | return SerializedDAG.from_dict(data)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1785, in from_dict
scheduler  | return cls.deserialize_dag(serialized_obj["dag"])
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1697, in deserialize_dag
scheduler  | deser = SerializedBaseOperator.deserialize_operator(obj[Encoding.VAR])
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1436, in deserialize_operator
scheduler  | cls.populate_operator(op, encoded_op)
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1300, in populate_operator
scheduler  | v = cls._deserialize_timedelta(v)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 910, in _deserialize_timedelta
scheduler  | return datetime.timedelta(seconds=seconds)
scheduler  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
scheduler  | TypeError: unsupported type for timedelta seconds component: NoneType

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Activity

  1. tirkarthi commented on Apr 2, 2025

    @tirkarthi
    Contributor

    By breaking the scheduler do you mean the scheduler process crashes and exits? Can you please add stacktrace ir any?

  2. arollet22 commented on Apr 2, 2025

    @arollet22
    Author

    It's part of the shared logs, I think it is this line:
    scheduler | [2025-04-02T18:06:03.610+0200] {process_utils.py:80} INFO - Process psutil.Process(pid=79173, status='terminated', exitcode=0, started='18:01:49') (79173) terminated with exit code 0

    I also stop receiving heartbeats and no more scheduling happens

  3. tirkarthi commented on Apr 3, 2025

    @tirkarthi
    Contributor

    Sorry, I missed the logs and it seems to be not formatted. The issues seems to be as below where the deserialization takes seconds as None for timedelta. This seems to be fixed in 97d62ee (PR #46766) and also backported to 2.10 in #46822

    python                            
    Python 3.11.11 (main, Dec  4 2024, 08:55:08) [GCC 9.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import datetime
    >>> datetime.timedelta(seconds=None) 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unsupported type for timedelta seconds component: NoneType
    
    File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1436, in deserialize_operator
    cls.populate_operator(op, encoded_op) 
    File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 1300, in populate_operator
    v = cls._deserialize_timedelta(v)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/Users/mac-XXX/standalone-airflow/.venv/lib/python3.11/site-packages/airflow/serialization/serialized_objects.py", line 910, in _deserialize_timedelta
    return datetime.timedelta(seconds=seconds)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: unsupported type for timedelta seconds component: NoneType 
    
  4. arollet22 commented on Apr 3, 2025

    @arollet22
    Author

    Sorry for the bad formatting, any tips on how to do that better? Might be helpful in the future.

    Indeed I missed that PR as I only went through the Github issues, thank you very much.

    Looks like it's not released yet and will be part of a future 2.10 patch if I understand correctly ?

  5. tirkarthi commented on Apr 3, 2025

    @tirkarthi
    Contributor

    @arollet22 You can wrap code and stacktrace inside triple backquotes code

    https://docs.github.com/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax

    The patch will be released as part of Airflow 2.10.6 though I am not sure of the timeline for the release.

  6. arollet22 commented on Apr 3, 2025

    @arollet22
    Author

    Okay, I found out there is a trick, it would not render the codeblock without adding an empty line after , thank you.
    I
    'll close this issue as it's been taken care. I understand that the timeline can't be given, my production cluster is still running on Airflow 2.9.2 anyway so my only choice for now, is to not use this configuration.

    Thanks again for the help!

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions