Skip to content

Warning error formatting crashes the scheduler #66195

Description

@AvisDX

Under which category would you file this issue?

Airflow Core

Apache Airflow version

3.2.1

What happened and how to reproduce it?

We have our JWT secret which 44 bytes long and it gives a warning on the startup of the process via:
warnings.warn(key_length_msg, InsecureKeyLengthWarning, stacklevel=2)
but some formatting error of the warning crashes the process altogether


2026-04-30T10:08:50.242838Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.schemas
2026-04-30T10:08:50.243212Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.tables
2026-04-30T10:08:50.243472Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.types
2026-04-30T10:08:50.243713Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.constraints
2026-04-30T10:08:50.243953Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.defaults
2026-04-30T10:08:50.244189Z | INFO | 7 | plugins.py:37 | setup plugin alembic.autogenerate.comments
  ____________       _____________
 ____    |__( )_________  __/__  /________      __
____  /| |_  /__  ___/_  /_ __  /_  __ \_ | /| / /
___  ___ |  / _  /   _  __/ _  / / /_/ /_ |/ |/ /
 _/_/  |_/_/  /_/    /_/    /_/  \____/____/|__/
2026-04-30T10:08:51.463132Z | WARNING | 7 | default_celery.py:60 | No visibility_timeout configured in [celery_broker_transport_options]. Using default of 86400 seconds (24 hours). Celery tasks running longer than this will be redelivered by the broker, which terminates the original task. If you have long-running tasks, increase this value in your Airflow configuration: [celery_broker_transport_options] visibility_timeout = <seconds>
2026-04-30T10:08:51.499480Z | WARNING | 7 | default_celery.py:60 | No visibility_timeout configured in [celery_broker_transport_options]. Using default of 86400 seconds (24 hours). Celery tasks running longer than this will be redelivered by the broker, which terminates the original task. If you have long-running tasks, increase this value in your Airflow configuration: [celery_broker_transport_options] visibility_timeout = <seconds>
2026-04-30T10:08:51.505461Z | INFO | 7 | executor_loader.py:376 | Loaded executor: :CeleryExecutor:
2026-04-30T10:08:51.953394Z | INFO | 7 | scheduler_job_runner.py:1442 | Starting the scheduler
2026-04-30T10:08:51.955599Z | INFO | 7 | scheduler_job_runner.py:2715 | Adopting or resetting orphaned tasks for active dag runs
2026-04-30T10:08:52.320332Z | INFO | 7 | scheduler_job_runner.py:665 | 4 tasks up for execution:
	<TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]>
	<TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]>
	<TaskInstance: <dag>.send_summary_emails scheduled__2026-04-30T07:00:00+00:00 [scheduled]>
	<TaskInstance: <dag>.reparse_dags manual__2026-04-30T08:03:41.487312+00:00 [scheduled]>
2026-04-30T10:08:52.320646Z | INFO | 7 | scheduler_job_runner.py:749 | DAG <dag> has 0/16 running and queued tasks
2026-04-30T10:08:52.320842Z | INFO | 7 | scheduler_job_runner.py:749 | DAG <dag> has 0/16 running and queued tasks
2026-04-30T10:08:52.321055Z | INFO | 7 | scheduler_job_runner.py:749 | DAG <dag> has 0/16 running and queued tasks
2026-04-30T10:08:52.321257Z | INFO | 7 | scheduler_job_runner.py:749 | DAG <dag> has 0/16 running and queued tasks
2026-04-30T10:08:52.321553Z | INFO | 7 | scheduler_job_runner.py:902 | Setting the following tasks to queued state (scheduler job_id=31):
	<TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]> (id=<uuid>, try_number=1)
	<TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]> (id=<uuid>, try_number=1)
	<TaskInstance: <dag>.send_summary_emails scheduled__2026-04-30T07:00:00+00:00 [scheduled]> (id=<uuid>, try_number=1)
	<TaskInstance: <dag>.reparse_dags manual__2026-04-30T08:03:41.487312+00:00 [scheduled]> (id=<uuid>, try_number=1)
2026-04-30T10:08:52.327927Z | INFO | 7 | scheduler_job_runner.py:1030 | Trying to enqueue tasks: [<TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]>, <TaskInstance: <dag>.run_<dag> scheduled__2026-04-30T02:00:00+00:00 [scheduled]>, <TaskInstance: <dag>.send_summary_emails scheduled__2026-04-30T07:00:00+00:00 [scheduled]>, <TaskInstance: <dag>.reparse_dags manual__2026-04-30T08:03:41.487312+00:00 [scheduled]>] for executor: CeleryExecutor(parallelism=32)
2026-04-30T10:08:52.337837Z | ERROR | 7 | scheduler_job_runner.py:1468 | Exception when executing SchedulerJob._run_scheduler_loop
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1463, in _execute
    self._run_scheduler_loop()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1602, in _run_scheduler_loop
    num_queued_tis = self._do_scheduling(session)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1747, in _do_scheduling
    num_queued_tis = self._critical_section_enqueue_task_instances(session=session)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1036, in _critical_section_enqueue_task_instances
    self._enqueue_task_instances_with_queued_state(queued_tis_per_executor, executor, session=session)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 982, in _enqueue_task_instances_with_queued_state
    workload = workloads.ExecuteTask.make(
        ti,
        generator=executor.jwt_generator,
        sentry_integration=_get_sentry_integration(executor),
    )
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/executors/workloads/task.py", line 99, in make
    token=cls.generate_token(str(ti.id), generator),
          ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/executors/workloads/base.py", line 77, in generate_token
    return generator.generate({"sub": sub_id}) if generator else ""
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/api_fastapi/auth/tokens.py", line 474, in generate
    return jwt.encode(claims, self.signing_arg, algorithm=self.algorithm, headers=headers)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/jwt/api_jwt.py", line 147, in encode
    return self._jws.encode(
           ~~~~~~~~~~~~~~~~^
        json_payload,
        ^^^^^^^^^^^^^
    ...<4 lines>...
        sort_headers=sort_headers,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/airflow/.local/lib/python3.13/site-packages/jwt/api_jws.py", line 197, in encode
    warnings.warn(key_length_msg, InsecureKeyLengthWarning, stacklevel=2)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/python/lib/python3.13/warnings.py", line 110, in _showwarnmsg
    sw(msg.message, msg.category, msg.filename, msg.lineno,
    ~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       msg.file, msg.line)
       ^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/structlog.py", line 678, in _showwarning
    warning_log.warning(str(message), category=category.__name__, filename=filename, lineno=lineno)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/structlog.py", line 96, in meth
    return self._proxy_to_logger(name, event, **kw)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/structlog/_base.py", line 222, in _proxy_to_logger
    args, kw = self._process_event(method_name, event, event_kw)
               ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/structlog/_base.py", line 173, in _process_event
    event_dict = proc(self._logger, method_name, event_dict)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/percent_formatter.py", line 161, in __call__
    sio.write(self._fmt % params)
              ~~~~~~~~~~^~~~~~~~
TypeError: %d format: a real number is required, not str
2026-04-30T10:08:52.346415Z | INFO | 7 | scheduler_job_runner.py:1480 | Exited execute loop
Traceback (most recent call last):
  File "/home/airflow/.local/bin/airflow", line 6, in <module>
    sys.exit(main())
             ~~~~^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/__main__.py", line 55, in main
    args.func(args)
    ~~~~~~~~~^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/cli/cli_config.py", line 49, in command
    return func(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/utils/cli.py", line 113, in wrapper
    return f(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/utils/providers_configuration_loader.py", line 54, in wrapped_function
    return func(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/cli/commands/scheduler_command.py", line 66, in scheduler
    run_command_with_daemon_option(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        args=args,
        ^^^^^^^^^^
    ...<2 lines>...
        should_setup_logging=True,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/cli/commands/daemon_utils.py", line 86, in run_command_with_daemon_option
    callback()
    ~~~~~~~~^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/cli/commands/scheduler_command.py", line 69, in <lambda>
    callback=lambda: _run_scheduler_job(args),
                     ~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/utils/memray_utils.py", line 59, in wrapper
    return func(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/cli/commands/scheduler_command.py", line 48, in _run_scheduler_job
    run_job(job=job_runner.job, execute_callable=job_runner._execute)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/utils/session.py", line 100, in wrapper
    return func(*args, session=session, **kwargs)  # type: ignore[arg-type]
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/job.py", line 355, in run_job
    return execute_job(job, execute_callable=execute_callable)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/job.py", line 384, in execute_job
    ret = execute_callable()
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1463, in _execute
    self._run_scheduler_loop()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1602, in _run_scheduler_loop
    num_queued_tis = self._do_scheduling(session)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1747, in _do_scheduling
    num_queued_tis = self._critical_section_enqueue_task_instances(session=session)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 1036, in _critical_section_enqueue_task_instances
    self._enqueue_task_instances_with_queued_state(queued_tis_per_executor, executor, session=session)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/jobs/scheduler_job_runner.py", line 982, in _enqueue_task_instances_with_queued_state
    workload = workloads.ExecuteTask.make(
        ti,
        generator=executor.jwt_generator,
        sentry_integration=_get_sentry_integration(executor),
    )
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/executors/workloads/task.py", line 99, in make
    token=cls.generate_token(str(ti.id), generator),
          ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/executors/workloads/base.py", line 77, in generate_token
    return generator.generate({"sub": sub_id}) if generator else ""
           ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/api_fastapi/auth/tokens.py", line 474, in generate
    return jwt.encode(claims, self.signing_arg, algorithm=self.algorithm, headers=headers)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/jwt/api_jwt.py", line 147, in encode
    return self._jws.encode(
           ~~~~~~~~~~~~~~~~^
        json_payload,
        ^^^^^^^^^^^^^
    ...<4 lines>...
        sort_headers=sort_headers,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/home/airflow/.local/lib/python3.13/site-packages/jwt/api_jws.py", line 197, in encode
    warnings.warn(key_length_msg, InsecureKeyLengthWarning, stacklevel=2)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/python/lib/python3.13/warnings.py", line 110, in _showwarnmsg
    sw(msg.message, msg.category, msg.filename, msg.lineno,
    ~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       msg.file, msg.line)
       ^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/structlog.py", line 678, in _showwarning
    warning_log.warning(str(message), category=category.__name__, filename=filename, lineno=lineno)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/structlog.py", line 96, in meth
    return self._proxy_to_logger(name, event, **kw)
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/structlog/_base.py", line 222, in _proxy_to_logger
    args, kw = self._process_event(method_name, event, event_kw)
               ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/airflow/.local/lib/python3.13/site-packages/structlog/_base.py", line 173, in _process_event
    event_dict = proc(self._logger, method_name, event_dict)
  File "/home/airflow/.local/lib/python3.13/site-packages/airflow/_shared/logging/percent_formatter.py", line 161, in __call__
    sio.write(self._fmt % params)
              ~~~~~~~~~~^~~~~~~~
TypeError: %d format: a real number is required, not str

What you think should happen instead?

No response

Operating System

No response

Deployment

None

Apache Airflow Provider(s)

No response

Versions of Apache Airflow Providers

No response

Official Helm Chart version

1.18.0

Kubernetes Version

No response

Helm Chart configuration

No response

Docker Image customizations

No response

Anything else?

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:corekind:bugThis is a clearly a bugneeds-triagelabel for new issues that we didn't triage yetpriority:criticalShowstopper bug that should be patched immediately

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions