Files
watcher/releasenotes/notes/applier-threading-mode-882c79ca8843bc5a.yaml
Douglas Viroel e45860787f Adds support for threading mode in applier
To support threading mode in the applier, this patch switches taskflow
engine to serial when eventlet is not patched. This avoids an issue
caused by the multiple threads reading/writing Action objects when
running with parallel engine. This limitation should be adressed in
a different patch which may also require a refactoring in database api
and how watcher manages its sessions and contexts.

Changes:
1. Add InlineThread class
   - Executes functions synchronously while maintaining thread interface
2. Use serial engine for threading mode
   - Switches to taskflow serial engine when eventlet is not patched
3. Replace default GreenThreadPoolExecutor in TriggerActionPlan
   - A new executor will be created based on the thread mode configured
4. Adds helper functions to spawn, start, wait and kill threads
   - The thread will be handled based on the thread mode configured
5. Threading mode job and tox-threading updated to include applier
   - These jobs will now enable threading mode for the applier content
     and service

Assisted-By: claude-code sonnet-4.5
Co-Authored-By: Sean Mooney <work@seanmooney.info>
Change-Id: I85926cdd1e4393be42fe6d543af50bf2948b5ce6
Signed-off-by: Douglas Viroel <viroel@gmail.com>
2025-12-29 10:12:05 -03:00

16 lines
863 B
YAML

---
features:
- |
The Applier service now supports running with ``native threading``
mode enabled as opposed to the use of the Eventlet library. Note that the
use of ``native threading`` is still ``experimental``, and is disabled by
default. It should not be used in production. To switch from Eventlet to
native threading mode, the environment variable
``OS_WATCHER_DISABLE_EVENTLET_PATCHING=true`` needs to be added to the
applier service configuration. When running in native threading mode, the
default workflow engine (Taskflow) will be configured with a serial engine,
which will execute the actions sequentially, due to a limitation of the
current implementation of watcher services.
For more information, please check `eventlet
removal <https://wiki.openstack.org/wiki/Eventlet-removal>`__ documentation.