geocomm-descue opened a new issue, #59117:
URL: https://github.com/apache/airflow/issues/59117

   ### Apache Airflow version
   
   3.1.3
   
   ### If "Other Airflow 2/3 version" selected, which one?
   
   _No response_
   
   ### What happened?
   
   We have a couple of custom subclasses of BaseTrigger. When testing a new 
one, I had a couple of print statements inside the definition to `async def 
run` on the trigger class. When an operator defered to the triggerer with that 
trigger, the Triggerer immediatly dies with the following error.
   
   ```
   [2025-12-05T21:29:15.305663Z] {triggerer_job_runner.py:173} ERROR - 
Exception when executing TriggerRunnerSupervisor.run
   Traceback (most recent call last):
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/triggerer_job_runner.py",
 line 170, in _execute
       self.trigger_runner.run()
       ~~~~~~~~~~~~~~~~~~~~~~~^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/triggerer_job_runner.py",
 line 529, in run
       self._service_subprocess(1)
       ~~~~~~~~~~~~~~~~~~~~~~~~^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 772, in _service_subprocess
       need_more = socket_handler(key.fileobj)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 1679, in cb
       gen.send(line)
       ~~~~~~~~^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 1777, in forward_to_log
       log.log(level, msg, logger=logger)
       ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/structlog/_native.py",
 line 197, in log
       return self._proxy_to_logger(
              ~~~~~~~~~~~~~~~~~~~~~^
           name, _maybe_interpolate(event, args), **kw
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       )
       ^
     File 
"/home/vscode/.pyenv/versions/3.13.7/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/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/structlog/_base.py",
 line 173, in _process_event
       event_dict = proc(self._logger, method_name, event_dict)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/_shared/logging/percent_formatter.py",
 line 152, in __call__
       sio.write(self._fmt % params)
                 ~~~~~~~~~~^~~~~~~~
   TypeError: %d format: a real number is required, not NoneType
   [2025-12-05T21:29:15.306829Z] {triggerer_job_runner.py:176} INFO - Waiting 
for triggers to clean up
   [2025-12-05T21:29:15.310214Z] {supervisor.py:709} INFO - Process exited 
pid=62478 exit_code=-2 signal_sent=SIGINT
   [2025-12-05T21:29:15.310309Z] {triggerer_job_runner.py:181} INFO - Exited 
trigger loop
   Traceback (most recent call last):
     File "/workspace/main.py", line 40, in <module>
       main()
       ~~~~^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/click/core.py",
 line 1442, in __call__
       return self.main(*args, **kwargs)
              ~~~~~~~~~^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/click/core.py",
 line 1363, in main
       rv = self.invoke(ctx)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/click/core.py",
 line 1226, in invoke
       return ctx.invoke(self.callback, **ctx.params)
              ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/click/core.py",
 line 794, in invoke
       return callback(*args, **kwargs)
     File "/workspace/main.py", line 34, in main
       sys.exit(main())
                ~~~~^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/__main__.py",
 line 55, in main
       args.func(args)
       ~~~~~~~~~^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/cli/cli_config.py",
 line 49, in command
       return func(*args, **kwargs)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/utils/cli.py",
 line 114, in wrapper
       return f(*args, **kwargs)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/utils/providers_configuration_loader.py",
 line 54, in wrapped_function
       return func(*args, **kwargs)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/cli/commands/triggerer_command.py",
 line 69, in triggerer
       run_command_with_daemon_option(
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
           args=args,
           ^^^^^^^^^^
       ...<2 lines>...
           should_setup_logging=True,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
       )
       ^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/cli/commands/daemon_utils.py",
 line 86, in run_command_with_daemon_option
       callback()
       ~~~~~~~~^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/cli/commands/triggerer_command.py",
 line 72, in <lambda>
       callback=lambda: triggerer_run(args.skip_serve_logs, args.capacity, 
triggerer_heartrate),
                        
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/cli/commands/triggerer_command.py",
 line 55, in triggerer_run
       run_job(job=triggerer_job_runner.job, 
execute_callable=triggerer_job_runner._execute)
       
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/utils/session.py",
 line 100, in wrapper
       return func(*args, session=session, **kwargs)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/job.py",
 line 368, in run_job
       return execute_job(job, execute_callable=execute_callable)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/job.py",
 line 397, in execute_job
       ret = execute_callable()
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/triggerer_job_runner.py",
 line 170, in _execute
       self.trigger_runner.run()
       ~~~~~~~~~~~~~~~~~~~~~~~^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/jobs/triggerer_job_runner.py",
 line 529, in run
       self._service_subprocess(1)
       ~~~~~~~~~~~~~~~~~~~~~~~~^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 772, in _service_subprocess
       need_more = socket_handler(key.fileobj)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 1679, in cb
       gen.send(line)
       ~~~~~~~~^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/sdk/execution_time/supervisor.py",
 line 1777, in forward_to_log
       log.log(level, msg, logger=logger)
       ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/structlog/_native.py",
 line 197, in log
       return self._proxy_to_logger(
              ~~~~~~~~~~~~~~~~~~~~~^
           name, _maybe_interpolate(event, args), **kw
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       )
       ^
     File 
"/home/vscode/.pyenv/versions/3.13.7/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/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/structlog/_base.py",
 line 173, in _process_event
       event_dict = proc(self._logger, method_name, event_dict)
     File 
"/home/vscode/.pyenv/versions/3.13.7/lib/python3.13/site-packages/airflow/_shared/logging/percent_formatter.py",
 line 152, in __call__
       sio.write(self._fmt % params)
                 ~~~~~~~~~~^~~~~~~~
   TypeError: %d format: a real number is required, not NoneType
   INFO:     Shutting down
   INFO:     Waiting for application shutdown.
   INFO:     Application shutdown complete.
   INFO:     Finished server process [62450]
   ```
   
   Any attempt to restart the triggerer fails and crashes with the same error 
due to the dagrun still being active and the operator still in a defered state. 
The triggerer only restarts succesfully if the defered task times out or is 
killed . 
   
   I was able to reproduce the error by TimeDeltaTrigger and adding a single 
print statement to an otherwise unmodified trigger. With the print statement 
there, the triggerer crashes. without it, it works normally. I understand that 
printing is synchronous and generally not recomended inside an async function, 
but I would not expect it to bring down the whole triggerer.
   
   ### What you think should happen instead?
   
   I would think that print statement, while maybe not recomended in async 
programing, wouldn't crash the triggerer. 
   
   ### How to reproduce
   
   Add a print statement inside the call to `async def run` in any trigger.
   
   ### Operating System
   
   Ubuntu 22.04.5 LTS
   
   ### Versions of Apache Airflow Providers
   
   apache-airflow-providers-amazon==9.16.0
   apache-airflow-providers-celery==3.13.0
   apache-airflow-providers-cncf-kubernetes==10.9.0
   apache-airflow-providers-common-compat==1.8.0
   apache-airflow-providers-common-io==1.6.4
   apache-airflow-providers-common-sql==1.28.2
   apache-airflow-providers-git==0.0.9
   apache-airflow-providers-http==5.4.0
   apache-airflow-providers-sendgrid==4.1.4
   apache-airflow-providers-smtp==2.3.1
   apache-airflow-providers-standard==1.9.1
   
   ### Deployment
   
   Official Apache Airflow Helm Chart
   
   ### Deployment details
   
   _No response_
   
   ### Anything else?
   
   We see this behavior both in our deployed instances and in `airflow 
standalone`
   
   ### Are you willing to submit PR?
   
   - [ ] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to