Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-oslo.messaging for
openSUSE:Factory checked in at 2026-03-09 16:11:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.messaging (Old)
and /work/SRC/openSUSE:Factory/.python-oslo.messaging.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.messaging"
Mon Mar 9 16:11:10 2026 rev:36 rq:1337518 version:17.3.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-oslo.messaging/python-oslo.messaging.changes
2025-11-10 19:18:44.299860574 +0100
+++
/work/SRC/openSUSE:Factory/.python-oslo.messaging.new.8177/python-oslo.messaging.changes
2026-03-09 16:11:32.337416127 +0100
@@ -1,0 +2,20 @@
+Sun Mar 8 20:36:06 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 17.3.0:
+ * Do not delete queues on error
+ * Deprecate enforce\_fips\_mode
+ * Remove old hacking check for oslo namespace package
+ * Delay string interpolations at logging calls
+ * rabbit: Fix ignored PreconditionFailed error
+ * Simplify process group fallback expression
+ * reno: Update master for unmaintained/2024.1
+ * Bump kombu to 4.6.8
+ * Bump pyupgrade target to 3.10+
+ * Fix broken fallback causing type inconsistency
+ * Restore license note about optional deps
+ * pre-commit: Bump dependencies
+ * Migrate setup configuration to pyproject.toml
+ * Drop Python 3.9 support
+ * Update master for stable/2025.2
+
+-------------------------------------------------------------------
Old:
----
oslo_messaging-17.1.0.tar.gz
New:
----
oslo_messaging-17.3.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-oslo.messaging.spec ++++++
--- /var/tmp/diff_new_pack.hA4kYl/_old 2026-03-09 16:11:33.277454984 +0100
+++ /var/tmp/diff_new_pack.hA4kYl/_new 2026-03-09 16:11:33.277454984 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-oslo.messaging
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-oslo.messaging
-Version: 17.1.0
+Version: 17.3.0
Release: 0
Summary: OpenStack oslo.messaging library
License: Apache-2.0
++++++ oslo_messaging-17.1.0.tar.gz -> oslo_messaging-17.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/.pre-commit-config.yaml
new/oslo_messaging-17.3.0/.pre-commit-config.yaml
--- old/oslo_messaging-17.1.0/.pre-commit-config.yaml 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/.pre-commit-config.yaml 2026-02-18
14:45:04.000000000 +0100
@@ -1,20 +1,14 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v5.0.0
+ rev: v6.0.0
hooks:
- id: trailing-whitespace
- # Replaces or checks mixed line ending
- id: mixed-line-ending
args: ['--fix', 'lf']
exclude: '.*\.(svg)$'
- # Forbid files which have a UTF-8 byte-order marker
- - id: check-byte-order-marker
- # Checks that non-binary executables have a proper shebang
+ - id: fix-byte-order-marker
- id: check-executables-have-shebangs
- # Check for files that contain merge conflict strings.
- id: check-merge-conflict
- # Check for debugger imports and py37+ breakpoint()
- # calls in python source
- id: debug-statements
- id: check-yaml
files: .*\.(yaml|yml)$
@@ -24,12 +18,12 @@
- id: hacking
additional_dependencies: []
- repo: https://github.com/PyCQA/bandit
- rev: 1.7.10
+ rev: 1.8.6
hooks:
- id: bandit
args: ['-x', 'tests,tools']
- repo: https://github.com/asottile/pyupgrade
- rev: v3.18.0
+ rev: v3.20.0
hooks:
- id: pyupgrade
- args: [--py3-only]
+ args: [--py310-plus]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/AUTHORS
new/oslo_messaging-17.3.0/AUTHORS
--- old/oslo_messaging-17.1.0/AUTHORS 2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/AUTHORS 2026-02-18 14:45:54.000000000 +0100
@@ -96,6 +96,7 @@
Ilya Shakhat <[email protected]>
Ilya Tyaptin <[email protected]>
Iswarya_Vakati <[email protected]>
+Ivan Anfimov <[email protected]>
James Carey <[email protected]>
James E. Blair <[email protected]>
James Page <[email protected]>
@@ -133,6 +134,7 @@
Lukas Bezdicka <[email protected]>
Luong Anh Tuan <[email protected]>
Mark McLoughlin <[email protected]>
+Matt Crees <[email protected]>
Matt Riedemann <[email protected]>
Matt Riedemann <[email protected]>
Matthew Booth <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/ChangeLog
new/oslo_messaging-17.3.0/ChangeLog
--- old/oslo_messaging-17.1.0/ChangeLog 2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/ChangeLog 2026-02-18 14:45:54.000000000 +0100
@@ -1,6 +1,29 @@
CHANGES
=======
+17.3.0
+------
+
+* Do not delete queues on error
+* Deprecate enforce\_fips\_mode
+* Remove old hacking check for oslo namespace package
+
+17.2.0
+------
+
+* Delay string interpolations at logging calls
+* rabbit: Fix ignored PreconditionFailed error
+* Simplify process group fallback expression
+* reno: Update master for unmaintained/2024.1
+* Bump kombu to 4.6.8
+* Bump pyupgrade target to 3.10+
+* Fix broken fallback causing type inconsistency
+* Restore license note about optional deps
+* pre-commit: Bump dependencies
+* Migrate setup configuration to pyproject.toml
+* Drop Python 3.9 support
+* Update master for stable/2025.2
+
17.1.0
------
@@ -13,6 +36,7 @@
17.0.0
------
+* Remove tags from README
* Fix RPC metric labels being reused incorrectly
* Remove quorum options with typo
* Update master for stable/2025.1
@@ -24,6 +48,7 @@
* Skip installation to speed up pep8
* Fixed: use self.start\_time in QManager shm
+* Fix Queue Manager in podman containerised env
* Added Docs for Simulator
* rabbit: validate input for retry options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/PKG-INFO
new/oslo_messaging-17.3.0/PKG-INFO
--- old/oslo_messaging-17.1.0/PKG-INFO 2025-07-11 16:23:06.748381400 +0200
+++ new/oslo_messaging-17.3.0/PKG-INFO 2026-02-18 14:45:54.968240300 +0100
@@ -1,10 +1,10 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: oslo.messaging
-Version: 17.1.0
+Version: 17.3.0
Summary: Oslo Messaging API
-Home-page: https://docs.openstack.org/oslo.messaging/latest/
-Author: OpenStack
-Author-email: [email protected]
+Author-email: OpenStack <[email protected]>
+Project-URL: Homepage, https://docs.openstack.org/oslo.messaging
+Project-URL: Repository, https://opendev.org/openstack/oslo.messaging
Classifier: Environment :: OpenStack
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
@@ -12,13 +12,14 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: pbr>=2.0.0
Requires-Dist: futurist>=1.2.0
@@ -34,35 +35,22 @@
Requires-Dist: WebOb>=1.7.1
Requires-Dist: PyYAML>=3.13
Requires-Dist: amqp>=2.5.2
-Requires-Dist: kombu>=4.6.6
+Requires-Dist: kombu>=4.6.8
Requires-Dist: oslo.middleware>=3.31.0
Requires-Dist: oslo.metrics>=0.2.1
Provides-Extra: kafka
Requires-Dist: confluent-kafka>=1.3.0; extra == "kafka"
-Provides-Extra: test
-Requires-Dist: fixtures>=3.0.0; extra == "test"
-Requires-Dist: stestr>=2.0.0; extra == "test"
-Requires-Dist: testscenarios>=0.4; extra == "test"
-Requires-Dist: testtools>=2.2.0; extra == "test"
-Requires-Dist: oslotest>=3.2.0; extra == "test"
-Requires-Dist: pifpaf>=2.2.0; extra == "test"
-Requires-Dist: confluent-kafka>=1.3.0; extra == "test"
-Requires-Dist: coverage>=4.0; extra == "test"
-Requires-Dist: eventlet>=0.23.0; extra == "test"
-Requires-Dist: greenlet>=0.4.15; extra == "test"
-
-========================
-Team and repository tags
-========================
+Dynamic: license-file
+Dynamic: requires-dist
+
+======================
+Oslo Messaging Library
+======================
.. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
- :target: https://governance.openstack.org/tc/reference/tags/index.html
.. Change things from this point on
-Oslo Messaging Library
-======================
-
.. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
:target: https://pypi.org/project/oslo.messaging/
:alt: Latest Version
@@ -79,4 +67,3 @@
* Source: https://opendev.org/openstack/oslo.messaging
* Bugs: https://bugs.launchpad.net/oslo.messaging
* Release notes: https://docs.openstack.org/releasenotes/oslo.messaging/
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/README.rst
new/oslo_messaging-17.3.0/README.rst
--- old/oslo_messaging-17.1.0/README.rst 2025-07-11 16:21:43.000000000
+0200
+++ new/oslo_messaging-17.3.0/README.rst 2026-02-18 14:45:04.000000000
+0100
@@ -1,15 +1,11 @@
-========================
-Team and repository tags
-========================
+======================
+Oslo Messaging Library
+======================
.. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
- :target: https://governance.openstack.org/tc/reference/tags/index.html
.. Change things from this point on
-Oslo Messaging Library
-======================
-
.. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
:target: https://pypi.org/project/oslo.messaging/
:alt: Latest Version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/PKG-INFO
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/PKG-INFO
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/PKG-INFO 2025-07-11
16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/PKG-INFO 2026-02-18
14:45:54.000000000 +0100
@@ -1,10 +1,10 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: oslo.messaging
-Version: 17.1.0
+Version: 17.3.0
Summary: Oslo Messaging API
-Home-page: https://docs.openstack.org/oslo.messaging/latest/
-Author: OpenStack
-Author-email: [email protected]
+Author-email: OpenStack <[email protected]>
+Project-URL: Homepage, https://docs.openstack.org/oslo.messaging
+Project-URL: Repository, https://opendev.org/openstack/oslo.messaging
Classifier: Environment :: OpenStack
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
@@ -12,13 +12,14 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: pbr>=2.0.0
Requires-Dist: futurist>=1.2.0
@@ -34,35 +35,22 @@
Requires-Dist: WebOb>=1.7.1
Requires-Dist: PyYAML>=3.13
Requires-Dist: amqp>=2.5.2
-Requires-Dist: kombu>=4.6.6
+Requires-Dist: kombu>=4.6.8
Requires-Dist: oslo.middleware>=3.31.0
Requires-Dist: oslo.metrics>=0.2.1
Provides-Extra: kafka
Requires-Dist: confluent-kafka>=1.3.0; extra == "kafka"
-Provides-Extra: test
-Requires-Dist: fixtures>=3.0.0; extra == "test"
-Requires-Dist: stestr>=2.0.0; extra == "test"
-Requires-Dist: testscenarios>=0.4; extra == "test"
-Requires-Dist: testtools>=2.2.0; extra == "test"
-Requires-Dist: oslotest>=3.2.0; extra == "test"
-Requires-Dist: pifpaf>=2.2.0; extra == "test"
-Requires-Dist: confluent-kafka>=1.3.0; extra == "test"
-Requires-Dist: coverage>=4.0; extra == "test"
-Requires-Dist: eventlet>=0.23.0; extra == "test"
-Requires-Dist: greenlet>=0.4.15; extra == "test"
-
-========================
-Team and repository tags
-========================
+Dynamic: license-file
+Dynamic: requires-dist
+
+======================
+Oslo Messaging Library
+======================
.. image:: https://governance.openstack.org/tc/badges/oslo.messaging.svg
- :target: https://governance.openstack.org/tc/reference/tags/index.html
.. Change things from this point on
-Oslo Messaging Library
-======================
-
.. image:: https://img.shields.io/pypi/v/oslo.messaging.svg
:target: https://pypi.org/project/oslo.messaging/
:alt: Latest Version
@@ -79,4 +67,3 @@
* Source: https://opendev.org/openstack/oslo.messaging
* Bugs: https://bugs.launchpad.net/oslo.messaging
* Release notes: https://docs.openstack.org/releasenotes/oslo.messaging/
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/SOURCES.txt
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/SOURCES.txt
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/SOURCES.txt
2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/SOURCES.txt
2026-02-18 14:45:54.000000000 +0100
@@ -138,6 +138,7 @@
releasenotes/notes/adding_support_for_quorum_queues-3101d055b492289e.yaml
releasenotes/notes/allow-transient-no-expire-ce7ae9d8c9d15751.yaml
releasenotes/notes/auto-deleted-failed-quorum-ca6a3923c3ed999a.yaml
+releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
releasenotes/notes/blocking-executor-deprecated-895146c1c3bf2f51.yaml
releasenotes/notes/blocking-executor-support-dropped-a3bc74c6825863f0.yaml
releasenotes/notes/bug-1917645-rabbit-use-retry-parameter-for-notifications-3f7c508ab4437579.yaml
@@ -145,10 +146,12 @@
releasenotes/notes/bug-1993149-e8b231791b65e938.yaml
releasenotes/notes/bug-2068630-6ff92f213bc4eca0.yaml
releasenotes/notes/bug-2098714-d55094fa4fbb3178.yaml
+releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
releasenotes/notes/bump-amqp-version-due-to-tls-issue-e877b152eb101c15.yaml
releasenotes/notes/connection_ttl-2cf0fe6e1ab8c73c.yaml
releasenotes/notes/declare_fallback_durable_exchange-0db677de4fdf1e78.yaml
releasenotes/notes/deprecate-ZeroMQ-driver-a8af25aaba867c5b.yaml
+releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
releasenotes/notes/deprecate-eventlet-executor-13835b9818fd77f2.yaml
releasenotes/notes/deprecate-the-option-heartbeat_in_pthread-from-rabbit-driver-5757adb83701caa5.yaml
releasenotes/notes/deprecated-amqp1-driver-4bf57449bc2b7aad.yaml
@@ -157,6 +160,7 @@
releasenotes/notes/drop-python27-support-5ef2f365d8930483.yaml
releasenotes/notes/enforce_fips_mode-07dd259eb8a73c2b.yaml
releasenotes/notes/fix-access_policy-deafult-a6954a147cb002b0.yaml
+releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
releasenotes/notes/get-rpc-client-0b4aa62160864b29.yaml
releasenotes/notes/get-rpc-helpers-cls-8911826ac08aef2a.yaml
releasenotes/notes/get_rpc_transport-4aa3511ad9754a60.yaml
@@ -182,6 +186,7 @@
releasenotes/notes/remove-old-quorum-opts-with-typo-5e013064fb6df062.yaml
releasenotes/notes/remove-pika-1bae204ced2521a3.yaml
releasenotes/notes/remove-py38-381f832001230756.yaml
+releasenotes/notes/remove-py39-20d8b050389186ff.yaml
releasenotes/notes/reply_q-timeout-e3c3bae636e8bc74.yaml
releasenotes/notes/retry-support-07996ef04dda9482.yaml
releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
@@ -193,6 +198,7 @@
releasenotes/source/2024.1.rst
releasenotes/source/2024.2.rst
releasenotes/source/2025.1.rst
+releasenotes/source/2025.2.rst
releasenotes/source/conf.py
releasenotes/source/index.rst
releasenotes/source/newton.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/pbr.json
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/pbr.json
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/pbr.json 2025-07-11
16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/pbr.json 2026-02-18
14:45:54.000000000 +0100
@@ -1 +1 @@
-{"git_version": "827859af", "is_release": true}
\ No newline at end of file
+{"git_version": "3035e816", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo.messaging.egg-info/requires.txt
new/oslo_messaging-17.3.0/oslo.messaging.egg-info/requires.txt
--- old/oslo_messaging-17.1.0/oslo.messaging.egg-info/requires.txt
2025-07-11 16:23:06.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo.messaging.egg-info/requires.txt
2026-02-18 14:45:54.000000000 +0100
@@ -12,21 +12,9 @@
WebOb>=1.7.1
PyYAML>=3.13
amqp>=2.5.2
-kombu>=4.6.6
+kombu>=4.6.8
oslo.middleware>=3.31.0
oslo.metrics>=0.2.1
[kafka]
confluent-kafka>=1.3.0
-
-[test]
-fixtures>=3.0.0
-stestr>=2.0.0
-testscenarios>=0.4
-testtools>=2.2.0
-oslotest>=3.2.0
-pifpaf>=2.2.0
-confluent-kafka>=1.3.0
-coverage>=4.0
-eventlet>=0.23.0
-greenlet>=0.4.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/amqpdriver.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/amqpdriver.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/amqpdriver.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/amqpdriver.py
2026-02-18 14:45:04.000000000 +0100
@@ -70,7 +70,13 @@
# parse start time (in jiffies) since system boot
#
# https://www.man7.org/linux/man-pages//man5/proc_pid_stat.5.html
- with open(f'/proc/{self.pg}/stat') as f:
+ #
+ # We fallback to process id here when process group id is 0, as /proc/0
+ # does not exist. This is only hit in an edge case with the crun
+ # container runtime (default for podman), see issue for more details:
+ # https://github.com/containers/crun/issues/1642
+ proc_id = self.pg or os.getpid()
+ with open(f'/proc/{proc_id}/stat') as f:
self.start_time = int(f.read().split()[21])
def get(self):
@@ -118,7 +124,7 @@
"""
def __init__(self, name):
- self.name = "{} ({})".format(name, hex(id(self)))
+ self.name = f"{name} ({hex(id(self))})"
self._tasks = queue.Queue()
self._shutdown = eventletutils.Event()
@@ -771,7 +777,7 @@
topic = target.topic
exchange = self._get_exchange(target)
if target.server:
- topic = '{}.{}'.format(target.topic, target.server)
+ topic = f'{target.topic}.{target.server}'
LOG.debug(log_msg + "exchange '%(exchange)s'"
" topic '%(topic)s'", {'exchange': exchange,
'topic': topic})
@@ -824,7 +830,7 @@
for target, priority in targets_and_priorities:
conn.declare_topic_consumer(
exchange_name=self._get_exchange(target),
- topic='{}.{}'.format(target.topic, priority),
+ topic=f'{target.topic}.{priority}',
callback=listener, queue_name=pool)
return base.PollStyleListenerAdapter(listener, batch_size,
batch_timeout)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/common.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/common.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/common.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/common.py 2026-02-18
14:45:04.000000000 +0100
@@ -235,7 +235,7 @@
str_override = lambda self: message
new_ex_type = type(ex_type.__name__ + _REMOTE_POSTFIX, (ex_type,),
{'__str__': str_override, '__unicode__': str_override})
- new_ex_type.__module__ = '{}{}'.format(module, _REMOTE_POSTFIX)
+ new_ex_type.__module__ = f'{module}{_REMOTE_POSTFIX}'
try:
# NOTE(ameade): Dynamically create a new exception type and swap it in
# as the new type for the exception. This only works on user defined
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_fake.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_fake.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_fake.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_fake.py
2026-02-18 14:45:04.000000000 +0100
@@ -248,7 +248,7 @@
batch_size, batch_timeout):
targets = [
oslo_messaging.Target(
- topic='{}.{}'.format(target.topic, priority),
+ topic=f'{target.topic}.{priority}',
exchange=target.exchange)
for target, priority in targets_and_priorities]
listener = FakeListener(self._exchange_manager, targets, pool)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_kafka.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_kafka.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_kafka.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_kafka.py
2026-02-18 14:45:04.000000000 +0100
@@ -304,7 +304,7 @@
message, poll)
return self._produce_message(topic, message, poll)
except KafkaException as e:
- LOG.error("Produce message failed: %s" % str(e))
+ LOG.error("Produce message failed: %s", e)
break
except BufferError:
LOG.debug("Produce message queue full, "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_rabbit.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_rabbit.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/impl_rabbit.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/impl_rabbit.py
2026-02-18 14:45:04.000000000 +0100
@@ -86,6 +86,9 @@
'(valid only if SSL enabled).'),
cfg.BoolOpt('ssl_enforce_fips_mode',
default=False,
+ deprecated_for_removal=True,
+ deprecated_reason='FIPS_mode_set API was removed in OpenSSL '
+ '3.0.0. This option has no effect now.',
help='Global toggle for enforcing the OpenSSL FIPS mode. '
'This feature requires Python support. '
'This is available in Python 3.9 in all '
@@ -404,7 +407,6 @@
self.callback = callback
self.type = type
self.nowait = nowait
- rabbit_quorum_queue_config = rabbit_quorum_queue_config or {}
self.queue_arguments = _get_queue_arguments(
rabbit_ha_queues, rabbit_queue_ttl, rabbit_quorum_queue,
rabbit_quorum_queue_config, rabbit_stream_fanout)
@@ -419,7 +421,7 @@
self.rabbit_stream_fanout = rabbit_stream_fanout
self.next_stream_offset = "last"
- def _declare_fallback(self, err, conn, consumer_arguments):
+ def _declare_fallback_nondurable(self, err, conn, consumer_arguments):
"""Fallback by declaring a non durable queue.
When a control exchange is shared between services it is possible
@@ -431,26 +433,25 @@
to fallback by creating a non durable queue to match the default
config.
"""
- if "PRECONDITION_FAILED - inequivalent arg 'durable'" in str(err):
- LOG.info(
- "[%s] Retrying to declare the exchange (%s) as "
- "non durable", conn.connection_id, self.exchange_name)
- self.exchange = kombu.entity.Exchange(
- name=self.exchange_name,
- type=self.type,
- durable=False,
- auto_delete=self.queue_auto_delete)
- self.queue = kombu.entity.Queue(
- name=self.queue_name,
- channel=conn.channel,
- exchange=self.exchange,
- durable=False,
- auto_delete=self.queue_auto_delete,
- routing_key=self.routing_key,
- queue_arguments=self.queue_arguments,
- consumer_arguments=consumer_arguments
- )
- self.queue.declare()
+ LOG.info(
+ "[%s] Retrying to declare the exchange (%s) as "
+ "non durable", conn.connection_id, self.exchange_name)
+ self.exchange = kombu.entity.Exchange(
+ name=self.exchange_name,
+ type=self.type,
+ durable=False,
+ auto_delete=self.queue_auto_delete)
+ self.queue = kombu.entity.Queue(
+ name=self.queue_name,
+ channel=conn.channel,
+ exchange=self.exchange,
+ durable=False,
+ auto_delete=self.queue_auto_delete,
+ routing_key=self.routing_key,
+ queue_arguments=self.queue_arguments,
+ consumer_arguments=consumer_arguments
+ )
+ self.queue.declare()
def reset_stream_offset(self):
if not self.rabbit_stream_fanout:
@@ -493,16 +494,21 @@
try:
self.queue.declare()
except amqp_ex.PreconditionFailed as err:
- # NOTE(hberaud): This kind of exception may be triggered
- # when a control exchange is shared between services and
- # when services try to create it with configs that differ
- # from each others. RabbitMQ will reject the services
- # that try to create it with a configuration that differ
- # from the one used first.
- LOG.warning('[%s] Queue %s could not be declared probably '
- 'because of conflicting configurations: %s',
- conn.connection_id, self.queue_name, err)
- self._declare_fallback(err, conn, consumer_arguments)
+ if "PRECONDITION_FAILED - inequivalent arg 'durable'" in \
+ str(err):
+ # NOTE(hberaud): This kind of exception may be triggered
+ # when a control exchange is shared between services and
+ # when services try to create it with configs that differ
+ # from each others. RabbitMQ will reject the services
+ # that try to create it with a configuration that differ
+ # from the one used first.
+ LOG.warning('[%s] Queue %s could not be declared probably '
+ 'because of conflicting configurations: %s',
+ conn.connection_id, self.queue_name, err)
+ self._declare_fallback_nondurable(
+ err, conn, consumer_arguments)
+ else:
+ raise
except amqp_ex.NotFound as ex:
# NOTE(viktor.krivak): This exception is raised when
# non-durable and non-ha queue is hosted on node that
@@ -555,14 +561,6 @@
'Queue: [%(queue)s], '
'error message: [%(err_str)s]', info)
time.sleep(interval)
- if self.queue_arguments.get('x-queue-type') == 'quorum':
- # Before re-declare queue, try to delete it
- # This is helping with issue #2028384
- # NOTE(amorin) we need to make sure the connection is
- # established again, because when an error occur, the
- # connection is closed.
- conn.ensure_connection()
- self.queue.delete()
self.queue.declare()
else:
raise
@@ -605,24 +603,6 @@
nowait=self.nowait)
else:
raise
- except amqp_ex.InternalError as exc:
- if self.queue_arguments.get('x-queue-type') == 'quorum':
- # Before re-consume queue, try to delete it
- # This is helping with issue #2028384
- if exc.code == 541:
- LOG.warning('Queue %s seems broken, will try delete it '
- 'before starting over.', self.queue.name)
- # NOTE(amorin) we need to make sure the connection is
- # established again, because when an error occur, the
- # connection is closed.
- conn.ensure_connection()
- self.queue.delete()
- self.declare(conn)
- self.queue.consume(callback=self._callback,
- consumer_tag=str(tag),
- nowait=self.nowait)
- else:
- raise
def cancel(self, tag):
LOG.trace('ConsumerBase.cancel: canceling %s', tag)
@@ -814,19 +794,6 @@
self.ssl_cert_file = driver_conf.ssl_cert_file
self.ssl_ca_file = driver_conf.ssl_ca_file
- if self.ssl_enforce_fips_mode:
- if hasattr(ssl, 'FIPS_mode'):
- LOG.info("Enforcing the use of the OpenSSL FIPS mode")
- ssl.FIPS_mode_set(1)
- else:
- raise exceptions.ConfigurationError(
- "OpenSSL FIPS mode is not supported by your Python "
- "version. You must either change the Python "
- "executable used to a version with FIPS mode "
- "support or disable FIPS mode by setting the "
- "'[oslo_messaging_rabbit] ssl_enforce_fips_mode' "
- "configuration option to 'False'.")
-
self._url = ''
if url.hosts:
if url.transport.startswith('kombu+'):
@@ -1089,8 +1056,8 @@
retry = float('inf')
def on_error(exc, interval):
- LOG.debug("[%s] Received recoverable error from kombu:"
- % self.connection_id,
+ LOG.debug("[%s] Received recoverable error from kombu:",
+ self.connection_id,
exc_info=True)
recoverable_error_callback and recoverable_error_callback(exc)
@@ -1245,7 +1212,7 @@
for consumer in filter(lambda c: c.type == 'fanout',
self._consumers):
LOG.debug('[connection close] Deleting fanout '
- 'queue: %s ' % consumer.queue.name)
+ 'queue: %s ', consumer.queue.name)
consumer.queue.delete()
self._set_current_channel(None)
self.connection.release()
@@ -1300,8 +1267,8 @@
sock = self.channel.connection.sock
except AttributeError as e:
# Level is set to debug because otherwise we would spam the logs
- LOG.debug('[%s] Failed to get socket attribute: %s'
- % (self.connection_id, str(e)))
+ LOG.debug('[%s] Failed to get socket attribute: %s',
+ self.connection_id, e)
else:
sock.settimeout(timeout)
# TCP_USER_TIMEOUT is not defined on Windows and Mac OS X
@@ -1367,7 +1334,7 @@
# already do that for other connection
try:
self.connection.drain_events(timeout=0.001)
- except socket.timeout:
+ except TimeoutError:
pass
# NOTE(hberaud): In a clustered rabbitmq when
# a node disappears, we get a ConnectionRefusedError
@@ -1377,9 +1344,7 @@
# Catch these exceptions to ensure that we call
# ensure_connection for switching the
# connection destination.
- except (socket.timeout,
- ConnectionRefusedError,
- OSError,
+ except (TimeoutError, ConnectionRefusedError, OSError,
kombu.exceptions.OperationalError,
amqp_ex.ConnectionForced) as exc:
LOG.info("A recoverable connection/channel error "
@@ -1463,7 +1428,7 @@
try:
self.connection.drain_events(timeout=poll_timeout)
return
- except socket.timeout:
+ except TimeoutError:
poll_timeout = timer.check_return(
_raise_timeout, maximum=self._poll_timeout)
except self.connection.channel_errors as exc:
@@ -1534,7 +1499,7 @@
unique = self._q_manager.get()
else:
unique = uuid.uuid4().hex
- queue_name = '{}_fanout_{}'.format(topic, unique)
+ queue_name = f'{topic}_fanout_{unique}'
LOG.debug('Creating fanout queue: %s', queue_name)
is_durable = (self.rabbit_transient_quorum_queue or
@@ -1599,17 +1564,19 @@
try:
exchange(self.channel).declare()
except amqp_ex.PreconditionFailed as err:
- # NOTE(hberaud): This kind of exception may be triggered
- # when a control exchange is shared between services and
- # when services try to create it with configs that differ
- # from each others. RabbitMQ will reject the services
- # that try to create it with a configuration that differ
- # from the one used first.
if "PRECONDITION_FAILED - inequivalent arg 'durable'" \
in str(err):
+ # NOTE(hberaud): This kind of exception may be triggered
+ # when a control exchange is shared between services and
+ # when services try to create it with configs that differ
+ # from each others. RabbitMQ will reject the services
+ # that try to create it with a configuration that differ
+ # from the one used first.
LOG.warning("Force creating a non durable exchange.")
exchange.durable = False
exchange(self.channel).declare()
+ else:
+ raise
self._declared_exchanges.add(exchange.name)
log_info = {'msg': msg,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_drivers/pool.py
new/oslo_messaging-17.3.0/oslo_messaging/_drivers/pool.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_drivers/pool.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_drivers/pool.py 2026-02-18
14:45:04.000000000 +0100
@@ -128,7 +128,7 @@
def _on_expire(self, connection):
connection.close()
LOG.debug("Idle connection has expired and been closed."
- " Pool size: %d" % len(self._items))
+ " Pool size: %d", len(self._items))
def create(self, purpose=common.PURPOSE_SEND, retry=None):
LOG.debug('Pool creating new connection')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/_metrics/client.py
new/oslo_messaging-17.3.0/oslo_messaging/_metrics/client.py
--- old/oslo_messaging-17.1.0/oslo_messaging/_metrics/client.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/_metrics/client.py 2026-02-18
14:45:04.000000000 +0100
@@ -74,9 +74,9 @@
try:
self.tx_queue.put_nowait(m)
except queue.Full:
- LOG.warning("tx queues is already full(%s/%s). Fails to "
- "send the metrics(%s)" %
- (self.tx_queue.qsize(), self.tx_queue.maxsize, m))
+ LOG.warning("tx queues is already full(%d/%d). Fails to "
+ "send the metrics(%s)",
+ self.tx_queue.qsize(), self.tx_queue.maxsize, m)
if not self.send_thread.is_alive():
self.send_thread = threading.Thread(target=self.send_loop)
@@ -101,7 +101,7 @@
stoptime = time.time() + timeout
except Exception as e:
LOG.error("Failed to send metrics: %s. "
- "Wait 1 seconds for next try." % e)
+ "Wait 1 second for next try.", e)
time.sleep(1)
def send_metric(self, metric):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/hacking/checks.py
new/oslo_messaging-17.3.0/oslo_messaging/hacking/checks.py
--- old/oslo_messaging-17.1.0/oslo_messaging/hacking/checks.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/hacking/checks.py 2026-02-18
14:45:04.000000000 +0100
@@ -12,36 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-import re
-
import ast
-from hacking import core
-
-
-oslo_namespace_imports_dot = re.compile(r"import[\s]+oslo[.][^\s]+")
-oslo_namespace_imports_from_dot = re.compile(r"from[\s]+oslo[.]")
-oslo_namespace_imports_from_root = re.compile(r"from[\s]+oslo[\s]+import[\s]+")
-mock_imports_directly = re.compile(r"import[\s]+mock")
-mock_imports_direclty_from = re.compile(r"from[\s]+mock[\s]+import[\s]+")
-
-
[email protected]
-def check_oslo_namespace_imports(logical_line):
- if re.match(oslo_namespace_imports_from_dot, logical_line):
- msg = ("O321: '%s' must be used instead of '%s'.") % (
- logical_line.replace('oslo.', 'oslo_'),
- logical_line)
- yield (0, msg)
- elif re.match(oslo_namespace_imports_from_root, logical_line):
- msg = ("O321: '%s' must be used instead of '%s'.") % (
- logical_line.replace('from oslo import ', 'import oslo_'),
- logical_line)
- yield (0, msg)
- elif re.match(oslo_namespace_imports_dot, logical_line):
- msg = ("O321: '%s' must be used instead of '%s'.") % (
- logical_line.replace('import', 'from').replace('.', ' import '),
- logical_line)
- yield (0, msg)
class BaseASTChecker(ast.NodeVisitor):
@@ -124,7 +95,7 @@
def visit_ImportFrom(self, node):
for alias in node.names:
- full_name = '{}.{}'.format(node.module, alias.name)
+ full_name = f'{node.module}.{alias.name}'
self._filter_imports(full_name, alias)
return super().generic_visit(node)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/notify/messaging.py
new/oslo_messaging-17.3.0/oslo_messaging/notify/messaging.py
--- old/oslo_messaging-17.1.0/oslo_messaging/notify/messaging.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/notify/messaging.py
2026-02-18 14:45:04.000000000 +0100
@@ -73,7 +73,7 @@
priority = priority.lower()
for topic in self.topics:
target = oslo_messaging.Target(
- topic='{}.{}'.format(topic, priority))
+ topic=f'{topic}.{priority}')
try:
self.transport._send_notification(target, ctxt, message,
version=self.version,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/rpc/client.py
new/oslo_messaging-17.3.0/oslo_messaging/rpc/client.py
--- old/oslo_messaging-17.1.0/oslo_messaging/rpc/client.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/rpc/client.py 2026-02-18
14:45:04.000000000 +0100
@@ -80,7 +80,7 @@
"""Raised if we failed to send a message to a target."""
def __init__(self, target, ex):
- msg = 'Failed to send to target "{}": {}'.format(target, ex)
+ msg = f'Failed to send to target "{target}": {ex}'
super().__init__(msg)
self.target = target
self.ex = ex
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/rpc/dispatcher.py
new/oslo_messaging-17.3.0/oslo_messaging/rpc/dispatcher.py
--- old/oslo_messaging-17.1.0/oslo_messaging/rpc/dispatcher.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/rpc/dispatcher.py 2026-02-18
14:45:04.000000000 +0100
@@ -88,7 +88,7 @@
def __init__(self, version, method=None):
msg = "Endpoint does not support RPC version %s" % version
if method:
- msg = "{}. Attempted method: {}".format(msg, method)
+ msg = f"{msg}. Attempted method: {method}"
super().__init__(msg)
self.version = version
self.method = method
@@ -177,7 +177,7 @@
" for namespace and version filtering. It must" + \
" be of type oslo_messaging.Target. Do not" + \
" define an Endpoint method named 'target'"
- raise TypeError("{}: endpoint={}".format(errmsg, ep))
+ raise TypeError(f"{errmsg}: endpoint={ep}")
# Check if we have an attribute named 'oslo_rpc_server_ping'
oslo_rpc_server_ping = getattr(ep, 'oslo_rpc_server_ping', None)
@@ -186,7 +186,7 @@
" attribute which can be use to ping the" + \
" endpoint. Please avoid using any oslo_* " + \
" naming."
- LOG.warning("{} (endpoint={})".format(errmsg, ep))
+ LOG.warning(f"{errmsg} (endpoint={ep})")
self.endpoints = endpoints
@@ -243,16 +243,16 @@
client_timeout = cm_heartbeat_interval = 0
if cm_heartbeat_interval < 1:
- LOG.warning('Client provided an invalid timeout value of %r' % (
- incoming.client_timeout))
+ LOG.warning('Client provided an invalid timeout value of %r',
+ incoming.client_timeout)
return
while not event.wait(cm_heartbeat_interval):
LOG.debug(
'Sending call-monitor heartbeat for active call to %(method)s '
- '(interval=%(interval)i)' % (
- {'method': incoming.message.get('method'),
- 'interval': cm_heartbeat_interval}))
+ '(interval=%(interval)i)',
+ {'method': incoming.message.get('method'),
+ 'interval': cm_heartbeat_interval})
try:
incoming.heartbeat()
except Exception as exc:
@@ -260,8 +260,8 @@
# client has died. Nothing to do here but exit the watchdog
# thread. If the client is still alive (dead broker) then its
# RPC will timeout as expected.
- LOG.debug("Call-monitor heartbeat failed: %(exc)s"
- % ({'exc': exc}))
+ LOG.debug("Call-monitor heartbeat failed: %(exc)s",
+ {'exc': exc})
break
def dispatch(self, incoming):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/server.py
new/oslo_messaging-17.3.0/oslo_messaging/server.py
--- old/oslo_messaging-17.1.0/oslo_messaging/server.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/server.py 2026-02-18
14:45:04.000000000 +0100
@@ -65,7 +65,7 @@
"""Raised if an executor can't be loaded."""
def __init__(self, executor, ex):
- msg = 'Failed to load executor "{}": {}'.format(executor, ex)
+ msg = f'Failed to load executor "{executor}": {ex}'
super().__init__(msg)
self.executor = executor
self.ex = ex
@@ -75,7 +75,7 @@
"""Raised if we failed to listen on a target."""
def __init__(self, target, ex):
- msg = 'Failed to listen on target "{}": {}'.format(target, ex)
+ msg = f'Failed to listen on target "{target}": {ex}'
super().__init__(msg)
self.target = target
self.ex = ex
@@ -159,7 +159,7 @@
`timeout_timer` expires while waiting.
"""
with self._cond:
- msg = '{} is waiting for {} to complete'.format(caller, self._name)
+ msg = f'{caller} is waiting for {self._name} to complete'
self._wait(lambda: not self.complete,
msg, log_after, timeout_timer)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/tests/drivers/test_impl_rabbit.py
new/oslo_messaging-17.3.0/oslo_messaging/tests/drivers/test_impl_rabbit.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/drivers/test_impl_rabbit.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/drivers/test_impl_rabbit.py
2026-02-18 14:45:04.000000000 +0100
@@ -19,6 +19,7 @@
import time
import uuid
+from amqp import exceptions as amqp_ex
import fixtures
import kombu
import kombu.connection
@@ -31,7 +32,6 @@
from oslo_messaging._drivers import amqpdriver
from oslo_messaging._drivers import common as driver_common
from oslo_messaging._drivers import impl_rabbit as rabbit_driver
-from oslo_messaging.exceptions import ConfigurationError
from oslo_messaging.exceptions import MessageDeliveryFailure
from oslo_messaging.tests import utils as test_utils
from oslo_messaging.transport import DriverLoadFailure
@@ -206,66 +206,24 @@
)
-class TestRabbitDriverLoadSSLWithFIPS(test_utils.BaseTestCase):
- scenarios = [
- ('ssl_fips_mode', dict(options=dict(ssl=True,
- ssl_enforce_fips_mode=True),
- expected=True)),
- ]
-
- @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection'
- '.ensure_connection')
- @mock.patch('kombu.connection.Connection')
- def test_driver_load_with_fips_supported(self,
- connection_klass, fake_ensure):
- self.config(ssl=True, ssl_enforce_fips_mode=True,
- group="oslo_messaging_rabbit")
- transport = oslo_messaging.get_transport(self.conf,
- 'kombu+memory:////')
- self.addCleanup(transport.cleanup)
-
- with mock.patch.object(ssl, 'FIPS_mode',
- create=True, return_value=True):
- with mock.patch.object(ssl, 'FIPS_mode_set', create=True):
-
- connection = transport._driver._get_connection()
- connection_klass.assert_called_once_with(
- 'memory:///', transport_options={
- 'client_properties': {
- 'capabilities': {
- 'connection.blocked': True,
- 'consumer_cancel_notify': True,
- 'authentication_failure_close': True,
- },
- 'connection_name': connection.name},
- 'confirm_publish': True,
- 'on_blocked': mock.ANY,
- 'on_unblocked': mock.ANY},
- ssl=self.expected, login_method='AMQPLAIN',
- heartbeat=60, failover_strategy='round-robin'
- )
-
- @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection'
- '.ensure_connection')
- @mock.patch('oslo_messaging._drivers.impl_rabbit.ssl')
- @mock.patch('kombu.connection.Connection')
- def test_fips_unsupported(self, connection_klass, fake_ssl, fake_ensure):
- self.config(ssl=True, ssl_enforce_fips_mode=True,
- group="oslo_messaging_rabbit")
+class TestRabbitPublisher(test_utils.BaseTestCase):
+ @mock.patch('kombu.messaging.Producer.publish')
+ def test_send(self, fake_publish):
transport = oslo_messaging.get_transport(self.conf,
'kombu+memory:////')
- self.addCleanup(transport.cleanup)
-
- del fake_ssl.FIPS_mode
-
- # We do this test only if FIPS mode is not supported to
- # ensure that we hard fail.
- self.assertRaises(
- ConfigurationError,
- transport._driver._get_connection)
-
+ exchange_mock = mock.Mock()
+ with transport._driver._get_connection(
+ driver_common.PURPOSE_SEND) as pool_conn:
+ conn = pool_conn.connection
+ conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+ exchange_mock.return_value.declare.assert_not_called()
+ fake_publish.assert_called_with(
+ 'msg', expiration=None,
+ mandatory=False,
+ compression=self.conf.oslo_messaging_rabbit.kombu_compression,
+ exchange=exchange_mock,
+ routing_key='routing_key')
-class TestRabbitPublisher(test_utils.BaseTestCase):
@mock.patch('kombu.messaging.Producer.publish')
def test_send_with_timeout(self, fake_publish):
transport = oslo_messaging.get_transport(self.conf,
@@ -285,14 +243,53 @@
routing_key='routing_key')
@mock.patch('kombu.messaging.Producer.publish')
- def test_send_no_timeout(self, fake_publish):
+ def test_send_declare(self, fake_publish):
transport = oslo_messaging.get_transport(self.conf,
'kombu+memory:////')
exchange_mock = mock.Mock()
+ exchange_mock.passive = False
with transport._driver._get_connection(
driver_common.PURPOSE_SEND) as pool_conn:
conn = pool_conn.connection
conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+ exchange_mock.return_value.declare.assert_called_once_with()
+ fake_publish.assert_called_with(
+ 'msg', expiration=None,
+ mandatory=False,
+ compression=self.conf.oslo_messaging_rabbit.kombu_compression,
+ exchange=exchange_mock,
+ routing_key='routing_key')
+
+ @mock.patch('kombu.messaging.Producer.publish')
+ def test_send_declare_precondition_failed(self, fake_publish):
+ transport = oslo_messaging.get_transport(self.conf,
+ 'kombu+memory:////')
+ exchange_mock = mock.Mock()
+ exchange_mock.passive = False
+ exchange_mock.return_value.declare.side_effect = \
+ amqp_ex.PreconditionFailed('error')
+ with transport._driver._get_connection(
+ driver_common.PURPOSE_SEND) as pool_conn:
+ conn = pool_conn.connection
+ self.assertRaises(
+ amqp_ex.PreconditionFailed,
+ conn._publish, exchange_mock, 'msg', routing_key='routing_key')
+ fake_publish.assert_not_called()
+
+ @mock.patch('kombu.messaging.Producer.publish')
+ def test_send_declare_precondition_failed_durable(self, fake_publish):
+ transport = oslo_messaging.get_transport(self.conf,
+ 'kombu+memory:////')
+ exchange_mock = mock.Mock()
+ exchange_mock.passive = False
+ exchange_mock.return_value.declare.side_effect = [
+ amqp_ex.PreconditionFailed(
+ "PRECONDITION_FAILED - inequivalent arg 'durable'"), None]
+ with transport._driver._get_connection(
+ driver_common.PURPOSE_SEND) as pool_conn:
+ conn = pool_conn.connection
+ conn._publish(exchange_mock, 'msg', routing_key='routing_key')
+ self.assertEqual(2, exchange_mock.return_value.declare.call_count)
fake_publish.assert_called_with(
'msg', expiration=None,
mandatory=False,
@@ -778,7 +775,7 @@
type='topic',
durable=False,
auto_delete=False)
- topic = '{}.{}'.format(target.topic, target.server)
+ topic = f'{target.topic}.{target.server}'
queue = kombu.entity.Queue(name=topic,
channel=channel,
exchange=exchange,
@@ -928,7 +925,7 @@
type='topic',
durable=False,
auto_delete=False)
- topic = '{}.{}'.format(target.topic, target.server)
+ topic = f'{target.topic}.{target.server}'
producer = kombu.messaging.Producer(exchange=exchange,
channel=channel,
routing_key=topic)
@@ -1048,19 +1045,15 @@
'kombu.connection.Connection.connection'))
self.useFixture(fixtures.MockPatch(
'kombu.connection.Connection.channel'))
- # TODO(stephenfin): Drop hasattr when we drop support for kombo < 4.6.8
- if hasattr(kombu.connection.Connection, '_connection_factory'):
- self.useFixture(fixtures.MockPatch(
- 'kombu.connection.Connection._connection_factory'))
+ self.useFixture(fixtures.MockPatch(
+ 'kombu.connection.Connection._connection_factory'))
# starting from the first broker in the list
url = oslo_messaging.TransportURL.parse(self.conf, None)
self.connection = rabbit_driver.Connection(self.conf, url,
driver_common.PURPOSE_SEND)
- # TODO(stephenfin): Remove when we drop support for kombo < 4.6.8
- if hasattr(kombu.connection.Connection, 'connect'):
- self.useFixture(fixtures.MockPatch(
- 'kombu.connection.Connection.connect'))
+ self.useFixture(fixtures.MockPatch(
+ 'kombu.connection.Connection.connect'))
self.addCleanup(self.connection.close)
def test_ensure_four_retry(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/notify/test_logger.py
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/notify/test_logger.py
---
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/notify/test_logger.py
2025-07-11 16:21:43.000000000 +0200
+++
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/notify/test_logger.py
2026-02-18 14:45:04.000000000 +0100
@@ -50,7 +50,7 @@
def test_logging(self):
# NOTE(gtt): Using different topic to make tests run in parallel
- topic = 'test_logging_{}_driver_{}'.format(self.priority, self.driver)
+ topic = f'test_logging_{self.priority}_driver_{self.driver}'
if self.notify_url.startswith("kafka://"):
self.conf.set_override('consumer_group', str(uuid.uuid4()),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/utils.py
new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/utils.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/functional/utils.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/functional/utils.py
2026-02-18 14:45:04.000000000 +0100
@@ -253,7 +253,7 @@
self.wrong_order = []
def describe(self):
- text = "Sent {}, got {}; ".format(self.original, self.received)
+ text = f"Sent {self.original}, got {self.received}; "
e1 = ["%r was missing" % m for m in self.missing]
e2 = ["%r was not expected" % m for m in self.extra]
e3 = ["{!r} expected before {!r}".format(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/oslo_messaging/tests/rpc/test_dispatcher.py
new/oslo_messaging-17.3.0/oslo_messaging/tests/rpc/test_dispatcher.py
--- old/oslo_messaging-17.1.0/oslo_messaging/tests/rpc/test_dispatcher.py
2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/tests/rpc/test_dispatcher.py
2026-02-18 14:45:04.000000000 +0100
@@ -214,7 +214,7 @@
self.ctxt, **self.msg.get('args', {}))
else:
self.assertEqual(0, method.call_count,
- 'method: {}'.format(method))
+ f'method: {method}')
class TestDispatcherWithPingEndpoint(test_utils.BaseTestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/oslo_messaging/transport.py
new/oslo_messaging-17.3.0/oslo_messaging/transport.py
--- old/oslo_messaging-17.1.0/oslo_messaging/transport.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/oslo_messaging/transport.py 2026-02-18
14:45:04.000000000 +0100
@@ -184,7 +184,7 @@
"""Raised if a transport driver can't be loaded."""
def __init__(self, driver, ex):
- msg = 'Failed to load transport driver "{}": {}'.format(driver, ex)
+ msg = f'Failed to load transport driver "{driver}": {ex}'
super().__init__(msg)
self.driver = driver
self.ex = ex
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/pyproject.toml
new/oslo_messaging-17.3.0/pyproject.toml
--- old/oslo_messaging-17.1.0/pyproject.toml 2025-07-11 16:21:43.000000000
+0200
+++ new/oslo_messaging-17.3.0/pyproject.toml 2026-02-18 14:45:04.000000000
+0100
@@ -1,3 +1,67 @@
[build-system]
requires = ["pbr>=6.1.1"]
build-backend = "pbr.build"
+
+[project]
+name = "oslo.messaging"
+description = "Oslo Messaging API"
+readme = "README.rst"
+authors = [
+ {name = "OpenStack", email = "[email protected]"},
+]
+requires-python = ">=3.10"
+classifiers = [
+ "Environment :: OpenStack",
+ "Intended Audience :: Developers",
+ "Intended Audience :: Information Technology",
+ "License :: OSI Approved :: Apache Software License",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3 :: Only",
+ "Programming Language :: Python :: Implementation :: CPython",
+]
+dynamic = ["version", "dependencies"]
+
+[project.urls]
+Homepage = "https://docs.openstack.org/oslo.messaging"
+Repository = "https://opendev.org/openstack/oslo.messaging"
+
+[project.optional-dependencies]
+# package dependencies for optional (non-rabbitmq) messaging drivers.
+# projects can test-depend on oslo.messaging[<drivers>]
+# e.g.: oslo.messaging[kafka]
+kafka = [
+ "confluent-kafka>=1.3.0", # Apache-2.0
+]
+
+[project.scripts]
+oslo-messaging-send-notification =
"oslo_messaging.notify.notifier:_send_notification"
+
+[project.entry-points."oslo.messaging.drivers"]
+rabbit = "oslo_messaging._drivers.impl_rabbit:RabbitDriver"
+kafka = "oslo_messaging._drivers.impl_kafka:KafkaDriver"
+kombu = "oslo_messaging._drivers.impl_rabbit:RabbitDriver"
+fake = "oslo_messaging._drivers.impl_fake:FakeDriver"
+
+[project.entry-points."oslo.messaging.executors"]
+eventlet = "futurist:GreenThreadPoolExecutor"
+threading = "futurist:ThreadPoolExecutor"
+
+[project.entry-points."oslo.messaging.notify.drivers"]
+messagingv2 = "oslo_messaging.notify.messaging:MessagingV2Driver"
+messaging = "oslo_messaging.notify.messaging:MessagingDriver"
+log = "oslo_messaging.notify._impl_log:LogDriver"
+test = "oslo_messaging.notify._impl_test:TestDriver"
+noop = "oslo_messaging.notify._impl_noop:NoOpDriver"
+routing = "oslo_messaging.notify._impl_routing:RoutingDriver"
+
+[project.entry-points."oslo.config.opts"]
+"oslo.messaging" = "oslo_messaging.opts:list_opts"
+
+[tool.setuptools]
+packages = ["oslo_messaging"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
new/oslo_messaging-17.3.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
---
old/oslo_messaging-17.1.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_messaging-17.3.0/releasenotes/notes/avoid-quorum-deletion-ec5fede2d4ecb001.yaml
2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Avoid deleting RabbitMQ ``quorum`` queues if they are failing on server
+ side with ``Internal Server Error`` (error ``541``).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
new/oslo_messaging-17.3.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
---
old/oslo_messaging-17.1.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_messaging-17.3.0/releasenotes/notes/bug-2131652-70af38c59a65886e.yaml
2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ `Bug 2131652 <https://bugs.launchpad.net/oslo.messaging/+bug/2131652>`_:
+ Fixed ignorance of Precondition Failed error by rabbitmq driver so that
+ the error is properly raised to clients.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
new/oslo_messaging-17.3.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
---
old/oslo_messaging-17.1.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_messaging-17.3.0/releasenotes/notes/deprecate-enforce_fips_mode-5b0269709d0102dc.yaml
2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,5 @@
+---
+deprecations:
+ - |
+ The ``[oslo_messaging_rabbit] enforce_fips_mode`` option has been
+ deprecated and has no effect.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
new/oslo_messaging-17.3.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
---
old/oslo_messaging-17.1.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_messaging-17.3.0/releasenotes/notes/fix-queue-manager-with-podman-36078437037fa198.yaml
2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fixes a bug where calling some OpenStack utilites, such as ``nova-manage``,
+ within podman containers would fail when using Queue Manager.
+ `LP#2091703 <https://bugs.launchpad.net/oslo.messaging/+bug/2095178>`__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_messaging-17.1.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml
new/oslo_messaging-17.3.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml
---
old/oslo_messaging-17.1.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_messaging-17.3.0/releasenotes/notes/remove-py39-20d8b050389186ff.yaml
2026-02-18 14:45:04.000000000 +0100
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Support for Python 3.9 has been removed. Now the minimum python version
+ supported is 3.10.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/releasenotes/source/2024.1.rst
new/oslo_messaging-17.3.0/releasenotes/source/2024.1.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/2024.1.rst 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/releasenotes/source/2024.1.rst 2026-02-18
14:45:04.000000000 +0100
@@ -3,4 +3,4 @@
===========================
.. release-notes::
- :branch: stable/2024.1
+ :branch: unmaintained/2024.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/releasenotes/source/2025.2.rst
new/oslo_messaging-17.3.0/releasenotes/source/2025.2.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/2025.2.rst 1970-01-01
01:00:00.000000000 +0100
+++ new/oslo_messaging-17.3.0/releasenotes/source/2025.2.rst 2026-02-18
14:45:04.000000000 +0100
@@ -0,0 +1,6 @@
+===========================
+2025.2 Series Release Notes
+===========================
+
+.. release-notes::
+ :branch: stable/2025.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/releasenotes/source/index.rst
new/oslo_messaging-17.3.0/releasenotes/source/index.rst
--- old/oslo_messaging-17.1.0/releasenotes/source/index.rst 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/releasenotes/source/index.rst 2026-02-18
14:45:04.000000000 +0100
@@ -6,6 +6,7 @@
:maxdepth: 1
unreleased
+ 2025.2
2025.1
2024.2
2024.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/requirements.txt
new/oslo_messaging-17.3.0/requirements.txt
--- old/oslo_messaging-17.1.0/requirements.txt 2025-07-11 16:21:43.000000000
+0200
+++ new/oslo_messaging-17.3.0/requirements.txt 2026-02-18 14:45:04.000000000
+0100
@@ -25,7 +25,7 @@
# rabbit driver is the default
# we set the amqp version to ensure heartbeat works
amqp>=2.5.2 # BSD
-kombu>=4.6.6 # BSD
+kombu>=4.6.8 # BSD
# middleware
oslo.middleware>=3.31.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/setup.cfg
new/oslo_messaging-17.3.0/setup.cfg
--- old/oslo_messaging-17.1.0/setup.cfg 2025-07-11 16:23:06.748381400 +0200
+++ new/oslo_messaging-17.3.0/setup.cfg 2026-02-18 14:45:54.969240200 +0100
@@ -1,58 +1,5 @@
[metadata]
name = oslo.messaging
-author = OpenStack
-author_email = [email protected]
-summary = Oslo Messaging API
-description_file =
- README.rst
-home_page = https://docs.openstack.org/oslo.messaging/latest/
-python_requires = >=3.9
-classifier =
- Environment :: OpenStack
- Intended Audience :: Developers
- Intended Audience :: Information Technology
- License :: OSI Approved :: Apache Software License
- Operating System :: OS Independent
- Programming Language :: Python
- Programming Language :: Python :: 3
- Programming Language :: Python :: 3.9
- Programming Language :: Python :: 3.10
- Programming Language :: Python :: 3.11
- Programming Language :: Python :: 3.12
- Programming Language :: Python :: 3 :: Only
- Programming Language :: Python :: Implementation :: CPython
-
-[extras]
-kafka =
- confluent-kafka>=1.3.0 # Apache-2.0
-
-[files]
-packages =
- oslo_messaging
-
-[entry_points]
-console_scripts =
- oslo-messaging-send-notification =
oslo_messaging.notify.notifier:_send_notification
-oslo.messaging.drivers =
- rabbit = oslo_messaging._drivers.impl_rabbit:RabbitDriver
-
- kafka = oslo_messaging._drivers.impl_kafka:KafkaDriver
-
- kombu = oslo_messaging._drivers.impl_rabbit:RabbitDriver
-
- fake = oslo_messaging._drivers.impl_fake:FakeDriver
-oslo.messaging.executors =
- eventlet = futurist:GreenThreadPoolExecutor
- threading = futurist:ThreadPoolExecutor
-oslo.messaging.notify.drivers =
- messagingv2 = oslo_messaging.notify.messaging:MessagingV2Driver
- messaging = oslo_messaging.notify.messaging:MessagingDriver
- log = oslo_messaging.notify._impl_log:LogDriver
- test = oslo_messaging.notify._impl_test:TestDriver
- noop = oslo_messaging.notify._impl_noop:NoOpDriver
- routing = oslo_messaging.notify._impl_routing:RoutingDriver
-oslo.config.opts =
- oslo.messaging = oslo_messaging.opts:list_opts
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/tools/simulator.py
new/oslo_messaging-17.3.0/tools/simulator.py
--- old/oslo_messaging-17.1.0/tools/simulator.py 2025-07-11
16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/tools/simulator.py 2026-02-18
14:45:04.000000000 +0100
@@ -334,14 +334,14 @@
"""Handle start reports from clients"""
client_id = message['id']
- LOG.info('The client %s started to send messages' % client_id)
+ LOG.info('The client %s started to send messages', client_id)
self.connected_clients.add(client_id)
def sync_done(self, ctx, message):
"""Handle done reports from clients"""
client_id = message['id']
- LOG.info('The client %s finished msg sending.' % client_id)
+ LOG.info('The client %s finished msg sending.', client_id)
if client_id in self.connected_clients:
self.connected_clients.remove(client_id)
@@ -437,11 +437,11 @@
method = _rpc_call if self.sync_mode == 'call' else _rpc_cast
method(self.sync_client, msg, 'sync_start')
except Exception:
- LOG.error('The client: %s failed to sync with %s.' %
- (self.client_id, self.client.target))
+ LOG.error('The client: %s failed to sync with %s.',
+ self.client_id, self.client.target)
return False
- LOG.info('The client: {} successfully sync with {}'.format(
- self.client_id, self.client.target))
+ LOG.info('The client: %s successfully sync with %s',
+ self.client_id, self.client.target)
return True
def sync_done(self):
@@ -450,11 +450,11 @@
method = _rpc_call if self.sync_mode == 'call' else _rpc_cast
method(self.sync_client, msg, 'sync_done')
except Exception:
- LOG.error('The client: %s failed finish the sync with %s.'
- % (self.client_id, self.client.target))
+ LOG.error('The client: %s failed finish the sync with %s.',
+ self.client_id, self.client.target)
return False
- LOG.info('The client: %s successfully finished sync with %s'
- % (self.client_id, self.client.target))
+ LOG.info('The client: %s successfully finished sync with %s',
+ self.client_id, self.client.target)
return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_messaging-17.1.0/tox.ini
new/oslo_messaging-17.3.0/tox.ini
--- old/oslo_messaging-17.1.0/tox.ini 2025-07-11 16:21:43.000000000 +0200
+++ new/oslo_messaging-17.3.0/tox.ini 2026-02-18 14:45:04.000000000 +0100
@@ -71,7 +71,8 @@
[flake8]
show-source = True
-enable-extensions = H203,H106
+# H904: Delay string interpolations at logging calls
+enable-extensions = H203,H106,H904
# E731 skipped as assign a lambda expression
ignore = E731,H405,W504
exclude = .tox,dist,doc,*.egg,build,__init__.py
@@ -81,7 +82,6 @@
[flake8:local-plugins]
extension =
- O321 = checks:check_oslo_namespace_imports
O324 = checks:CheckForLoggingIssues
paths = ./oslo_messaging/hacking