Add a new tox environment to run unit tests in threading mode

It is done by disabling the eventlet patching and configuring
oslo.service backend to threading. Once oslo.service backend is
configured, it can't be reverted to eventlet. This needs to be
done before including other modules, which may include oslo.service
library.
Adds a job that run a subset of tests with eventlet patching disabled.

Change-Id: I9f8c2c5bbcf3192313cc3b309e8f2719a3bea18f
Signed-off-by: Douglas Viroel <viroel@gmail.com>
This commit is contained in:
Douglas Viroel
2025-07-15 14:51:31 -03:00
parent f879b10b05
commit 8ca794cdbb
3 changed files with 26 additions and 0 deletions

View File

@@ -278,6 +278,14 @@
devstack_localrc:
'SYSTEMD_ENV_VARS["watcher-decision-engine"]': OS_WATCHER_DISABLE_EVENTLET_PATCHING=true
- job:
name: openstack-tox-py312-threading
parent: openstack-tox-py312
description: |
Run tox with the py3-threading environment.
vars:
tox_envlist: py3-threading
- project:
queue: watcher
templates:
@@ -288,6 +296,7 @@
- release-notes-jobs-python3
check:
jobs:
- openstack-tox-py312-threading
- watcher-tempest-functional
- watcher-grenade
- watcher-tempest-strategies

10
tox.ini
View File

@@ -37,6 +37,16 @@ passenv =
# debugging issue with fixtures and mocks.
PYTHONOPTIMIZE
[testenv:py3-threading]
setenv =
OS_WATCHER_DISABLE_EVENTLET_PATCHING=true
commands =
rm -f .testrepository/times.dbm
find . -type f -name "*.py[c|o]" -delete
# NOTE(dviroel): Applier still requires changes to support
# threading mode
stestr run {posargs} --exclude-regex 'applier'
[testenv:pep8]
description =
Run style checks.

View File

@@ -21,6 +21,13 @@
from watcher import eventlet
eventlet.patch()
# NOTE(dviroel): oslo service backend needs to be initialize
# as soon as possible, before importing oslo service. If eventlet
# patching is enabled, it should be patched before calling this
# function
from watcher.common import oslo_service_helper as helper # noqa E402
helper.init_oslo_service_backend()
from watcher import objects # noqa E402
# NOTE(comstud): Make sure we have all of the objects loaded. We do this