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 2021-05-08 22:07:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.messaging (Old)
 and      /work/SRC/openSUSE:Factory/.python-oslo.messaging.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-oslo.messaging"

Sat May  8 22:07:23 2021 rev:24 rq:889993 version:12.7.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-oslo.messaging/python-oslo.messaging.changes  
    2020-10-26 16:17:29.942992349 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-oslo.messaging.new.2988/python-oslo.messaging.changes
    2021-05-08 22:07:25.345741333 +0200
@@ -1,0 +2,35 @@
+Sun May  2 17:30:41 UTC 2021 - cloud-de...@suse.de
+
+- update to version 12.7.1
+  - Adding pre-commit
+  - Fix doc title rendering
+  - Dropping lower constraints testing
+  - Remove six
+  - Deprecate the mandatory flag
+  - Run rabbitmq heartbeat in python thread by default
+  - remove unicode from code
+  - Update master for stable/victoria
+  - fix variable name
+  - Move jobs to py38
+  - Correctly handle missing RabbitMQ queues
+  - Python 3.9: isAlive is removed
+  - Add Python3 wallaby unit tests
+  - Use TOX_CONSTRAINTS_FILE
+  - Use py3 as the default runtime for tox
+  - Fix type of direct_mandatory_flag opt
+  - add min of 1 to rpc_conn_pool_size
+
+-------------------------------------------------------------------
+Tue Mar 16 11:16:36 UTC 2021 - Dirk M??ller <dmuel...@suse.com>
+
+- avoid sphinx-build failure on parsing rst files
+
+-------------------------------------------------------------------
+Tue Feb  2 00:39:03 UTC 2021 - cloud-de...@suse.de
+
+- update to version 12.5.1
+  - Update .gitreview for stable/victoria
+  - add min of 1 to rpc_conn_pool_size
+  - Update TOX_CONSTRAINTS_FILE for stable/victoria
+
+-------------------------------------------------------------------

Old:
----
  oslo.messaging-12.5.0.tar.gz

New:
----
  oslo.messaging-12.7.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-oslo.messaging.spec ++++++
--- /var/tmp/diff_new_pack.YTK89g/_old  2021-05-08 22:07:25.797739375 +0200
+++ /var/tmp/diff_new_pack.YTK89g/_new  2021-05-08 22:07:25.797739375 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-oslo.messaging
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,13 +17,13 @@
 
 
 Name:           python-oslo.messaging
-Version:        12.5.0
+Version:        12.7.1
 Release:        0
 Summary:        OpenStack oslo.messaging library
 License:        Apache-2.0
 Group:          Development/Languages/Python
-URL:            https://launchpad.net/oslo.messaging
-Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.messaging/oslo.messaging-12.5.0.tar.gz
+URL:            https://docs.openstack.org/oslo.messaging
+Source0:        
https://files.pythonhosted.org/packages/source/o/oslo.messaging/oslo.messaging-12.7.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-PyYAML >= 3.13
 BuildRequires:  python3-WebOb >= 1.7.1
@@ -61,7 +61,6 @@
 
 %package -n python3-oslo.messaging
 Summary:        OpenStack oslo.messaging library
-Group:          Development/Languages/Python
 Requires:       python3-PyYAML >= 3.13
 Requires:       python3-WebOb >= 1.7.1
 Requires:       python3-amqp >= 2.5.2
@@ -91,7 +90,6 @@
 
 %package -n python3-oslo.messaging-doc
 Summary:        Documentation for OpenStack messaging library
-Group:          Development/Languages/Python
 BuildRequires:  python3-Sphinx
 BuildRequires:  python3-openstackdocstheme
 
@@ -101,7 +99,7 @@
 This package contains the documentation.
 
 %prep
-%autosetup -p1 -n oslo.messaging-12.5.0
+%autosetup -p1 -n oslo.messaging-12.7.1
 %py_req_cleanup
 
 %build

++++++ _service ++++++
--- /var/tmp/diff_new_pack.YTK89g/_old  2021-05-08 22:07:25.821739271 +0200
+++ /var/tmp/diff_new_pack.YTK89g/_new  2021-05-08 22:07:25.825739254 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/victoria/openstack/oslo.messaging/oslo.messaging.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/wallaby/openstack/oslo.messaging/oslo.messaging.spec.j2</param>
     <param name="output-name">python-oslo.messaging.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/oslo.messaging/raw/branch/stable/victoria/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/oslo.messaging/raw/branch/stable/wallaby/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,oslo.messaging</param>
   </service>

++++++ oslo.messaging-12.5.0.tar.gz -> oslo.messaging-12.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/.pre-commit-config.yaml 
new/oslo.messaging-12.7.1/.pre-commit-config.yaml
--- old/oslo.messaging-12.5.0/.pre-commit-config.yaml   1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.messaging-12.7.1/.pre-commit-config.yaml   2021-02-16 
10:01:45.000000000 +0100
@@ -0,0 +1,35 @@
+# We from the Oslo project decided to pin repos based on the
+# commit hash instead of the version tag to prevend arbitrary
+# code from running in developer's machines.  To update to a
+# newer version, run `pre-commit autoupdate` and then replace
+# the newer versions with their commit hash.
+
+default_language_version:
+  python: python3
+
+repos:
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: ebc15addedad713c86ef18ae9632c88e187dd0af  # v3.1.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: 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)$
+  - repo: https://gitlab.com/pycqa/flake8
+    rev: 181bb46098dddf7e2d45319ea654b4b4d58c2840 # 3.8.3
+    hooks:
+      - id: flake8
+        additional_dependencies:
+          - hacking>=3.0.1,<3.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/.zuul.yaml 
new/oslo.messaging-12.7.1/.zuul.yaml
--- old/oslo.messaging-12.5.0/.zuul.yaml        2020-09-11 21:18:07.000000000 
+0200
+++ new/oslo.messaging-12.7.1/.zuul.yaml        2021-02-16 10:01:45.000000000 
+0100
@@ -1,29 +1,29 @@
 - job:
-    name: oslo.messaging-tox-py36-func-scenario01
-    parent: openstack-tox-py36
+    name: oslo.messaging-tox-py38-func-scenario01
+    parent: openstack-tox-py38
     vars:
-      tox_envlist: py36-func-scenario01
+      tox_envlist: py38-func-scenario01
       bindep_profile: rabbit
 
 - job:
-    name: oslo.messaging-tox-py36-func-scenario02
-    parent: openstack-tox-py36
+    name: oslo.messaging-tox-py38-func-scenario02
+    parent: openstack-tox-py38
     vars:
-      tox_envlist: py36-func-scenario02
+      tox_envlist: py38-func-scenario02
       bindep_profile: rabbit kafka amqp1
 
 - job:
-    name: oslo.messaging-tox-py36-func-scenario03
-    parent: openstack-tox-py36
+    name: oslo.messaging-tox-py38-func-scenario03
+    parent: openstack-tox-py38
     vars:
-      tox_envlist: py36-func-scenario03
+      tox_envlist: py38-func-scenario03
       bindep_profile: rabbit amqp1
 
 - job:
-    name: oslo.messaging-tox-py36-func-scenario04
-    parent: openstack-tox-py36
+    name: oslo.messaging-tox-py38-func-scenario04
+    parent: openstack-tox-py38
     vars:
-      tox_envlist: py36-func-scenario04
+      tox_envlist: py38-func-scenario04
       bindep_profile: kafka amqp1
 
 # Begin v3 native jobs
@@ -108,19 +108,18 @@
       - check-requirements
       - lib-forward-testing-python3
       - openstack-cover-jobs
-      - openstack-lower-constraints-jobs
-      - openstack-python3-victoria-jobs
+      - openstack-python3-wallaby-jobs
       - periodic-stable-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
     check:
       jobs:
-        - oslo.messaging-tox-py36-func-scenario01
-        - oslo.messaging-tox-py36-func-scenario02:
+        - oslo.messaging-tox-py38-func-scenario01
+        - oslo.messaging-tox-py38-func-scenario02:
             voting: false
-        - oslo.messaging-tox-py36-func-scenario03:
+        - oslo.messaging-tox-py38-func-scenario03:
             voting: false
-        - oslo.messaging-tox-py36-func-scenario04:
+        - oslo.messaging-tox-py38-func-scenario04:
             voting: false
         - oslo.messaging-src-dsvm-full-rabbit
         - oslo.messaging-src-dsvm-full-amqp1-hybrid:
@@ -134,5 +133,5 @@
 
     gate:
       jobs:
-        - oslo.messaging-tox-py36-func-scenario01
+        - oslo.messaging-tox-py38-func-scenario01
         - oslo.messaging-src-dsvm-full-rabbit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/AUTHORS 
new/oslo.messaging-12.7.1/AUTHORS
--- old/oslo.messaging-12.5.0/AUTHORS   2020-09-11 21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/AUTHORS   2021-02-16 10:02:14.000000000 +0100
@@ -156,6 +156,7 @@
 Sean Dague <s...@dague.net>
 Sean McGinnis <sean.mcgin...@gmail.com>
 Sean McGinnis <sean.mcgin...@huawei.com>
+Sean Mooney <w...@seanmooney.info>
 Sergey Lukjanov <slukja...@mirantis.com>
 Sergey Vilgelm <ser...@vilgelm.info>
 Shahar Lev <sha...@stratoscale.com>
@@ -167,6 +168,7 @@
 Takashi NATSUME <natsume.taka...@lab.ntt.co.jp>
 Thomas Bechtold <tbecht...@suse.com>
 Thomas Goirand <tho...@goirand.fr>
+Thomas Goirand <z...@debian.org>
 Thomas Herve <the...@redhat.com>
 Thomas Herve <thomas.he...@enovance.com>
 TommyLike <tommylik...@gmail.com>
@@ -236,6 +238,7 @@
 venkatamahesh <venkatamaheshko...@gmail.com>
 wanglmopenstack <wanglm_openst...@163.com>
 weiweigu <gu.wei...@zte.com.cn>
+xuanyandong <xuanyand...@inspur.com>
 yan.haifeng <yanhe...@qq.com>
 zhang-shaoman <zhang.shao...@zte.com.cn>
 zhangboye <zhangb...@inspur.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/ChangeLog 
new/oslo.messaging-12.7.1/ChangeLog
--- old/oslo.messaging-12.5.0/ChangeLog 2020-09-11 21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/ChangeLog 2021-02-16 10:02:14.000000000 +0100
@@ -1,6 +1,38 @@
 CHANGES
 =======
 
+12.7.1
+------
+
+* Correctly handle missing RabbitMQ queues
+
+12.7.0
+------
+
+* Deprecate the mandatory flag
+
+12.6.1
+------
+
+* remove unicode from code
+* Remove six
+* Fix type of direct\_mandatory\_flag opt
+* Dropping lower constraints testing
+* Move jobs to py38
+* fix variable name
+* Fix doc title rendering
+* Use TOX\_CONSTRAINTS\_FILE
+* Use py3 as the default runtime for tox
+
+12.6.0
+------
+
+* Python 3.9: isAlive is removed
+* add min of 1 to rpc\_conn\_pool\_size
+* Adding pre-commit
+* Add Python3 wallaby unit tests
+* Update master for stable/victoria
+
 12.5.0
 ------
 
@@ -9,6 +41,7 @@
 12.4.0
 ------
 
+* Run rabbitmq heartbeat in python thread by default
 * Add a ping endpoint to RPC dispatcher
 
 12.3.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/PKG-INFO 
new/oslo.messaging-12.7.1/PKG-INFO
--- old/oslo.messaging-12.5.0/PKG-INFO  2020-09-11 21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/PKG-INFO  2021-02-16 10:02:15.136758800 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oslo.messaging
-Version: 12.5.0
+Version: 12.7.1
 Summary: Oslo Messaging API
 Home-page: https://docs.openstack.org/oslo.messaging/latest/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/doc/source/admin/rabbit.rst 
new/oslo.messaging-12.7.1/doc/source/admin/rabbit.rst
--- old/oslo.messaging-12.5.0/doc/source/admin/rabbit.rst       2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/doc/source/admin/rabbit.rst       2021-02-16 
10:01:45.000000000 +0100
@@ -66,7 +66,8 @@
 through the *Connection* class.
 
 With mandatory flag RabbitMQ raises a callback if the message is not routed to
-any queue.
+any queue. This callback will be used to loop for a timeout and let's a chance
+to sender to recover.
 
 .. _Exchange is a AMQP mechanism: 
https://www.rabbitmq.com/tutorials/amqp-concepts.html#exchanges
 .. _queues: https://www.rabbitmq.com/queues.html
@@ -101,8 +102,8 @@
 Exchange types
 ~~~~~~~~~~~~~~
 
-`direct`
-^^^^^^^^
+``direct``
+^^^^^^^^^^
 
 A direct exchange is an exchange which route messages to queues based on
 message routing key. Message will be directly delivered to the queue that
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/doc/source/conf.py 
new/oslo.messaging-12.7.1/doc/source/conf.py
--- old/oslo.messaging-12.5.0/doc/source/conf.py        2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/doc/source/conf.py        2021-02-16 
10:01:45.000000000 +0100
@@ -1,4 +1,17 @@
 # -*- coding: utf-8 -*-
+# Copyright (C) 2020 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
 #
 # Configuration file for the Sphinx documentation builder.
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/doc/source/reference/index.rst 
new/oslo.messaging-12.7.1/doc/source/reference/index.rst
--- old/oslo.messaging-12.5.0/doc/source/reference/index.rst    2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/doc/source/reference/index.rst    2021-02-16 
10:01:45.000000000 +0100
@@ -16,4 +16,4 @@
    notification_driver
    notification_listener
    serializer
-   exceptions   
+   exceptions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/lower-constraints.txt 
new/oslo.messaging-12.7.1/lower-constraints.txt
--- old/oslo.messaging-12.5.0/lower-constraints.txt     2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/lower-constraints.txt     2021-02-16 
10:01:45.000000000 +0100
@@ -66,7 +66,6 @@
 requestsexceptions==1.2.0
 rfc3986==0.3.1
 Routes==2.3.1
-six==1.10.0
 smmap==0.9.0
 snowballstemmer==1.2.1
 statsd==3.2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo.messaging.egg-info/PKG-INFO 
new/oslo.messaging-12.7.1/oslo.messaging.egg-info/PKG-INFO
--- old/oslo.messaging-12.5.0/oslo.messaging.egg-info/PKG-INFO  2020-09-11 
21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo.messaging.egg-info/PKG-INFO  2021-02-16 
10:02:14.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: oslo.messaging
-Version: 12.5.0
+Version: 12.7.1
 Summary: Oslo Messaging API
 Home-page: https://docs.openstack.org/oslo.messaging/latest/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo.messaging.egg-info/SOURCES.txt 
new/oslo.messaging-12.7.1/oslo.messaging.egg-info/SOURCES.txt
--- old/oslo.messaging-12.5.0/oslo.messaging.egg-info/SOURCES.txt       
2020-09-11 21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo.messaging.egg-info/SOURCES.txt       
2021-02-16 10:02:15.000000000 +0100
@@ -1,4 +1,5 @@
 .coveragerc
+.pre-commit-config.yaml
 .stestr.conf
 .zuul.yaml
 AUTHORS
@@ -145,9 +146,11 @@
 releasenotes/notes/bump-amqp-version-due-to-tls-issue-e877b152eb101c15.yaml
 releasenotes/notes/connection_ttl-2cf0fe6e1ab8c73c.yaml
 releasenotes/notes/deprecate-ZeroMQ-driver-a8af25aaba867c5b.yaml
+releasenotes/notes/disable-mandatory-flag-a6210a534f3853f0.yaml
 releasenotes/notes/drop-python27-support-5ef2f365d8930483.yaml
 releasenotes/notes/fix-access_policy-deafult-a6954a147cb002b0.yaml
 releasenotes/notes/get_rpc_transport-4aa3511ad9754a60.yaml
+releasenotes/notes/handle-missing-queue-553a803f94976be7.yaml
 releasenotes/notes/kafka-client-library-change-fe16d5a34550db7f.yaml
 releasenotes/notes/no-log-if-ignore-errors-e2223b8a646b4c40.yaml
 
releasenotes/notes/option-rabbitmq-max_retries-has-been-deprecated-471f66a9e6d672a2.yaml
@@ -158,6 +161,7 @@
 releasenotes/notes/remove-ZeroMQ-driver-e9e0bbbb7bd4f5e6.yaml
 releasenotes/notes/remove-pika-1bae204ced2521a3.yaml
 releasenotes/notes/retry-support-07996ef04dda9482.yaml
+releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
 releasenotes/notes/use-extras-for-optional-deps-2a00e8007ef7a629.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
@@ -170,6 +174,7 @@
 releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/ussuri.rst
+releasenotes/source/victoria.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo.messaging.egg-info/pbr.json 
new/oslo.messaging-12.7.1/oslo.messaging.egg-info/pbr.json
--- old/oslo.messaging-12.5.0/oslo.messaging.egg-info/pbr.json  2020-09-11 
21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo.messaging.egg-info/pbr.json  2021-02-16 
10:02:14.000000000 +0100
@@ -1 +1 @@
-{"git_version": "62e104bd", "is_release": true}
\ No newline at end of file
+{"git_version": "11a49a0a", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo.messaging.egg-info/requires.txt 
new/oslo.messaging-12.7.1/oslo.messaging.egg-info/requires.txt
--- old/oslo.messaging-12.5.0/oslo.messaging.egg-info/requires.txt      
2020-09-11 21:19:52.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo.messaging.egg-info/requires.txt      
2021-02-16 10:02:14.000000000 +0100
@@ -30,6 +30,7 @@
 hacking<3.1.0,>=3.0.1
 oslotest>=3.2.0
 pifpaf>=2.2.0
+pre-commit>=2.6.0
 pyngus>=2.2.0
 stestr>=2.0.0
 testscenarios>=0.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/_drivers/amqp1_driver/controller.py 
new/oslo.messaging-12.7.1/oslo_messaging/_drivers/amqp1_driver/controller.py
--- 
old/oslo.messaging-12.5.0/oslo_messaging/_drivers/amqp1_driver/controller.py    
    2020-09-11 21:18:07.000000000 +0200
+++ 
new/oslo.messaging-12.7.1/oslo_messaging/_drivers/amqp1_driver/controller.py    
    2021-02-16 10:01:45.000000000 +0100
@@ -1022,9 +1022,9 @@
     def _do_connect(self):
         """Establish connection and reply subscription on processor thread."""
         host = self.hosts.current
-        conn_props = {'properties': {u'process': self._command,
-                                     u'pid': self._pid,
-                                     u'node': self._node}}
+        conn_props = {'properties': {'process': self._command,
+                                     'pid': self._pid,
+                                     'node': self._node}}
         # only set hostname in the AMQP 1.0 Open performative if the message
         # bus can interpret it as the virtual host.  We leave it unspecified
         # since apparently noone can agree on how it should be used otherwise!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/_drivers/amqpdriver.py 
new/oslo.messaging-12.7.1/oslo_messaging/_drivers/amqpdriver.py
--- old/oslo.messaging-12.5.0/oslo_messaging/_drivers/amqpdriver.py     
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/_drivers/amqpdriver.py     
2021-02-16 10:01:45.000000000 +0100
@@ -145,39 +145,67 @@
         while True:
             try:
                 with self.listener.driver._get_connection(
-                        rpc_common.PURPOSE_SEND) as conn:
+                    rpc_common.PURPOSE_SEND,
+                ) as conn:
                     self._send_reply(conn, reply, failure)
+
                 return
-            except rpc_amqp.AMQPDestinationNotFound:
-                if timer.check_return() > 0:
-                    LOG.debug(("The reply %(msg_id)s cannot be sent  "
-                               "%(reply_q)s reply queue doesn't exist, "
-                               "retrying..."), {
-                                   'msg_id': self.msg_id,
-                                   'reply_q': self.reply_q})
-                    time.sleep(0.25)
-                else:
+            except oslo_messaging.MessageUndeliverable:
+                # queue not found
+                if timer.check_return() <= 0:
                     self._obsolete_reply_queues.add(self.reply_q, self.msg_id)
-                    infos = {
+                    LOG.error(
+                        'The reply %(msg_id)s failed to send after '
+                        '%(duration)d seconds due to a missing queue '
+                        '(%(reply_q)s). Abandoning...', {
+                            'msg_id': self.msg_id,
+                            'duration': duration,
+                            'reply_q': self.reply_q})
+                    return
+
+                LOG.debug(
+                    'The reply %(msg_id)s could not be sent due to a missing '
+                    'queue (%(reply_q)s). Retrying...', {
                         'msg_id': self.msg_id,
-                        'reply_q': self.reply_q,
-                        'duration': duration
-                    }
-                    LOG.info("The reply %(msg_id)s cannot be sent  "
-                             "%(reply_q)s reply queue don't exist after "
-                             "%(duration)s sec abandoning...", infos)
+                        'reply_q': self.reply_q})
+                time.sleep(0.25)
+            except rpc_amqp.AMQPDestinationNotFound as exc:
+                # exchange not found/down
+                if timer.check_return() <= 0:
+                    self._obsolete_reply_queues.add(self.reply_q, self.msg_id)
+                    LOG.error(
+                        'The reply %(msg_id)s failed to send after '
+                        '%(duration)d seconds due to a broker issue '
+                        '(%(exc)s). Abandoning...', {
+                            'msg_id': self.msg_id,
+                            'duration': duration,
+                            'exc': exc})
                     return
 
+                LOG.debug(
+                    'The reply %(msg_id)s could not be sent due to a broker '
+                    'issue (%(exc)s). Retrying...', {
+                        'msg_id': self.msg_id,
+                        'exc': exc})
+                time.sleep(0.25)
+
     def heartbeat(self):
         # generate a keep alive for RPC call monitoring
         with self.listener.driver._get_connection(
-                rpc_common.PURPOSE_SEND) as conn:
+            rpc_common.PURPOSE_SEND,
+        ) as conn:
             try:
                 self._send_reply(conn, None, None, ending=False)
+            except oslo_messaging.MessageUndeliverable:
+                # internal exception that indicates queue gone -
+                # broker unreachable.
+                raise MessageDeliveryFailure(
+                    "Heartbeat send failed. Missing queue")
             except rpc_amqp.AMQPDestinationNotFound:
-                # internal exception that indicates queue/exchange gone -
+                # internal exception that indicates exchange gone -
                 # broker unreachable.
-                raise MessageDeliveryFailure("Heartbeat send failed")
+                raise MessageDeliveryFailure(
+                    "Heartbeat send failed. Missing exchange")
 
     # NOTE(sileht): Those have already be ack in RpcListener IO thread
     # We keep them as noop until all drivers do the same
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/_drivers/base.py 
new/oslo.messaging-12.7.1/oslo_messaging/_drivers/base.py
--- old/oslo.messaging-12.5.0/oslo_messaging/_drivers/base.py   2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/_drivers/base.py   2021-02-16 
10:01:45.000000000 +0100
@@ -24,7 +24,8 @@
 base_opts = [
     cfg.IntOpt('rpc_conn_pool_size', default=30,
                deprecated_group='DEFAULT',
-               help='Size of RPC connection pool.'),
+               help='Size of RPC connection pool.',
+               min=1),
     cfg.IntOpt('conn_pool_min_size', default=2,
                help='The pool size limit for connections expiration policy'),
     cfg.IntOpt('conn_pool_ttl', default=1200,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/_drivers/impl_rabbit.py 
new/oslo.messaging-12.7.1/oslo_messaging/_drivers/impl_rabbit.py
--- old/oslo.messaging-12.5.0/oslo_messaging/_drivers/impl_rabbit.py    
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/_drivers/impl_rabbit.py    
2021-02-16 10:01:45.000000000 +0100
@@ -88,14 +88,16 @@
                help='SSL certification authority file '
                     '(valid only if SSL enabled).'),
     cfg.BoolOpt('heartbeat_in_pthread',
-                default=False,
-                help="EXPERIMENTAL: Run the health check heartbeat thread "
-                     "through a native python thread. By default if this "
-                     "option isn't provided the  health check heartbeat will "
-                     "inherit the execution model from the parent process. By "
-                     "example if the parent process have monkey patched the "
+                default=True,
+                help="Run the health check heartbeat thread "
+                     "through a native python thread by default. If this "
+                     "option is equal to False then the health check "
+                     "heartbeat will inherit the execution model "
+                     "from the parent process. For "
+                     "example if the parent process has monkey patched the "
                      "stdlib by using eventlet/greenlet then the heartbeat "
-                     "will be run through a green thread."),
+                     "will be run through a green thread.",
+                deprecated_for_removal=True),
     cfg.FloatOpt('kombu_reconnect_delay',
                  default=1.0,
                  deprecated_group='DEFAULT',
@@ -167,12 +169,18 @@
                default=2,
                help='How often times during the heartbeat_timeout_threshold '
                'we check the heartbeat.'),
-    cfg.IntOpt('direct_mandatory_flag',
-               default=True,
-               help='Enable/Disable the RabbitMQ mandatory flag '
-               'for direct send. The direct send is used as reply, '
-               'so the MessageUndeliverable exception is raised '
-               'in case the client queue does not exist.'),
+    cfg.BoolOpt('direct_mandatory_flag',
+                default=True,
+                deprecated_for_removal=True,
+                deprecated_reason='Mandatory flag no longer deactivable.',
+                help='(DEPRECATED) Enable/Disable the RabbitMQ mandatory '
+                'flag for direct send. The direct send is used as reply, '
+                'so the MessageUndeliverable exception is raised '
+                'in case the client queue does not exist.'
+                'MessageUndeliverable exception will be used to loop for a '
+                'timeout to lets a chance to sender to recover.'
+                'This flag is deprecated and it will not be possible to '
+                'deactivate this functionality anymore'),
     cfg.BoolOpt('enable_cancel_on_failover',
                 default=False,
                 help="Enable x-cancel-on-ha-failover flag so that "
@@ -510,6 +518,7 @@
             # if it was already monkey patched by eventlet/greenlet.
             global threading
             threading = stdlib_threading
+
         self.direct_mandatory_flag = driver_conf.direct_mandatory_flag
 
         if self.ssl:
@@ -1259,11 +1268,11 @@
 
         _set_current_channel is responsible to cleanup the cache.
         """
-        queue_indentifier = (exchange.name, routing_key)
+        queue_identifier = (exchange.name, routing_key)
         # NOTE(sileht): We only do it once per reconnection
         # the Connection._set_current_channel() is responsible to clear
         # this cache
-        if queue_indentifier not in self._declared_queues:
+        if queue_identifier not in self._declared_queues:
             queue = kombu.entity.Queue(
                 channel=self.channel,
                 exchange=exchange,
@@ -1277,7 +1286,7 @@
                 'Connection._publish_and_creates_default_queue: '
                 'declare queue %(key)s on %(exchange)s exchange', log_info)
             queue.declare()
-            self._declared_queues.add(queue_indentifier)
+            self._declared_queues.add(queue_identifier)
 
         self._publish(exchange, msg, routing_key=routing_key, timeout=timeout)
 
@@ -1387,6 +1396,10 @@
         # the pool configuration properties
         max_size = conf.oslo_messaging_rabbit.rpc_conn_pool_size
         min_size = conf.oslo_messaging_rabbit.conn_pool_min_size
+        if max_size < min_size:
+            raise RuntimeError(
+                f"rpc_conn_pool_size: {max_size} must be greater than "
+                f"or equal to conn_pool_min_size: {min_size}")
         ttl = conf.oslo_messaging_rabbit.conn_pool_ttl
 
         connection_pool = pool.ConnectionPool(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/oslo_messaging/rpc/server.py 
new/oslo.messaging-12.7.1/oslo_messaging/rpc/server.py
--- old/oslo.messaging-12.5.0/oslo_messaging/rpc/server.py      2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/rpc/server.py      2021-02-16 
10:01:45.000000000 +0100
@@ -168,7 +168,7 @@
             # by another exception raised by a log handler during
             # LOG.debug(). So keep a copy and delete it later.
             failure = e.exc_info
-            LOG.debug(u'Expected exception during message handling (%s)', e)
+            LOG.debug('Expected exception during message handling (%s)', e)
         except rpc_dispatcher.NoSuchMethod as e:
             failure = sys.exc_info()
             if e.method.endswith('_ignore_errors'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/drivers/test_amqp_driver.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/drivers/test_amqp_driver.py
--- old/oslo.messaging-12.5.0/oslo_messaging/tests/drivers/test_amqp_driver.py  
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/tests/drivers/test_amqp_driver.py  
2021-02-16 10:01:45.000000000 +0100
@@ -227,7 +227,7 @@
                          {"msg": "value"}, wait_for_reply=False)
         self.assertIsNone(rc)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         self.assertEqual({"msg": "value"}, listener.messages.get().message)
 
         predicate = lambda: (self._broker.sender_link_ack_count == 1)
@@ -260,9 +260,9 @@
         self.assertEqual('e2', rc.get('correlation-id'))
 
         listener1.join(timeout=30)
-        self.assertFalse(listener1.isAlive())
+        self.assertFalse(listener1.is_alive())
         listener2.join(timeout=30)
-        self.assertFalse(listener2.isAlive())
+        self.assertFalse(listener2.is_alive())
         driver.cleanup()
 
     def test_messaging_patterns(self):
@@ -313,9 +313,9 @@
                     {"method": "echo", "id": "fanout"})
 
         listener1.join(timeout=30)
-        self.assertFalse(listener1.isAlive())
+        self.assertFalse(listener1.is_alive())
         listener2.join(timeout=30)
-        self.assertFalse(listener2.isAlive())
+        self.assertFalse(listener2.is_alive())
         self.assertEqual(1, self._broker.fanout_count)
 
         listener1_ids = [x.message.get('id') for x in listener1.get_messages()]
@@ -359,7 +359,7 @@
                           wait_for_reply=True,
                           timeout=1.0)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_released_send(self):
@@ -428,7 +428,7 @@
                           wait_for_reply=True,
                           timeout=1.0)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
 
         predicate = lambda: (self._broker.sender_link_ack_count == 1)
         _wait_until(predicate, 30)
@@ -465,7 +465,7 @@
                           wait_for_reply=True,
                           timeout=5.0)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_call_reply_timeout(self):
@@ -497,7 +497,7 @@
                           wait_for_reply=True,
                           timeout=3)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_listener_requeue(self):
@@ -515,7 +515,7 @@
         self.assertIsNone(rc)
 
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
 
         predicate = lambda: (self._broker.sender_link_requeue_count == 1)
         _wait_until(predicate, 30)
@@ -564,7 +564,7 @@
         _wait_until(predicate, 30)
         self.assertTrue(predicate())
 
-        self.assertTrue(listener.isAlive())
+        self.assertTrue(listener.is_alive())
         self.assertEqual({"msg": "value"}, listener.messages.get().message)
 
         predicate = lambda: (self._broker.receiver_link_count == 0)
@@ -580,7 +580,7 @@
         _wait_until(predicate, 30)
         self.assertTrue(predicate())
 
-        self.assertTrue(listener.isAlive())
+        self.assertTrue(listener.is_alive())
         self.assertEqual({"msg": "value"}, listener.messages.get().message)
 
         predicate = lambda: (self._broker.receiver_link_count == 0)
@@ -606,7 +606,7 @@
         self.assertIsNotNone(rc)
         self.assertEqual("1", rc.get('correlation-id'))
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_call_monitor_bad_no_heartbeat(self):
@@ -626,7 +626,7 @@
                           timeout=60,
                           call_monitor_timeout=5)
         listener.kill()
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_call_monitor_bad_call_timeout(self):
@@ -646,7 +646,7 @@
                           timeout=11,
                           call_monitor_timeout=5)
         listener.kill()
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
 
@@ -681,7 +681,7 @@
                     excepted_targets.append(t)
 
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         topics = [x.message.get('target') for x in listener.get_messages()]
         self.assertEqual(msg_count, len(topics))
         self.assertEqual(2, topics.count('topic-1.info'))
@@ -763,7 +763,7 @@
                          {"method": "echo"}, wait_for_reply=True)
         self.assertIsNotNone(rc)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_authentication_failure(self):
@@ -865,7 +865,7 @@
                              retry=retry)
             self.assertIsNotNone(rc)
             listener.join(timeout=30)
-            self.assertFalse(listener.isAlive())
+            self.assertFalse(listener.is_alive())
         finally:
             driver.cleanup()
 
@@ -949,7 +949,7 @@
     def tearDown(self):
         super(TestFailover, self).tearDown()
         for broker in self._brokers:
-            if broker.isAlive():
+            if broker.is_alive():
                 broker.stop()
 
     def _failover(self, fail_broker):
@@ -1007,7 +1007,7 @@
         self.assertEqual(1, self._brokers[self._backup].direct_count)
 
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
 
         # note: stopping the broker first tests cleaning up driver without a
         # connection active
@@ -1087,7 +1087,7 @@
 
         listener1.join(timeout=30)
         listener2.join(timeout=30)
-        self.assertFalse(listener1.isAlive() or listener2.isAlive())
+        self.assertFalse(listener1.is_alive() or listener2.is_alive())
 
         driver.cleanup()
         self._brokers[1].stop()
@@ -1127,7 +1127,7 @@
             driver.cleanup()
             raise
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         self.assertEqual(listener.messages.get().message.get('method'), "echo")
         driver.cleanup()
 
@@ -1193,7 +1193,7 @@
                     wait_for_reply=False)
         listener.join(timeout=30)
         self.assertTrue(self._broker.fanout_count == 1)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         self.assertEqual(listener.messages.get().message.get('method'), "echo")
         driver.cleanup()
 
@@ -1208,8 +1208,8 @@
             else:
                 # unblock all link when RPC call is made
                 link.add_capacity(10)
-                for l in self._blocked_links:
-                    l.add_capacity(10)
+                for li in self._blocked_links:
+                    li.add_capacity(10)
 
         self._broker.on_receiver_active = _on_active
         self._broker.on_credit_exhausted = lambda link: None
@@ -1243,7 +1243,7 @@
         self.assertEqual(rc.get('correlation-id'), 'e1')
         listener.join(timeout=30)
         self.assertTrue(self._broker.fanout_count == 3)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
 
@@ -1293,15 +1293,15 @@
                                      {"msg": topic}, 2.0)
             expected.append(topic)
 
-        for l in rl:
-            l.join(timeout=30)
+        for li in rl:
+            li.join(timeout=30)
 
         # anycast will not evenly distribute an odd number of msgs
         predicate = lambda: len(expected) == (nl[0].messages.qsize() +
                                               nl[1].messages.qsize())
         _wait_until(predicate, 30)
-        for l in nl:
-            l.kill(timeout=30)
+        for li in nl:
+            li.kill(timeout=30)
 
         s1_payload = [m.message.get('msg') for m in rl[0].get_messages()]
         s2_payload = [m.message.get('msg') for m in rl[1].get_messages()]
@@ -1520,7 +1520,7 @@
             self.assertEqual(rc.get('correlation-id'), 'blah')
             listener.join(timeout=30)
         finally:
-            self.assertFalse(listener.isAlive())
+            self.assertFalse(listener.is_alive())
             driver.cleanup()
 
     def test_released(self):
@@ -1615,7 +1615,7 @@
                     wait_for_reply=True,
                     timeout=30)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_server_ok(self):
@@ -1669,7 +1669,7 @@
                     wait_for_reply=True,
                     timeout=30)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def test_bad_server_fail(self):
@@ -1723,7 +1723,7 @@
                     wait_for_reply=True,
                     timeout=30)
         listener.join(timeout=30)
-        self.assertFalse(listener.isAlive())
+        self.assertFalse(listener.is_alive())
         driver.cleanup()
 
     def tearDown(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/drivers/test_impl_rabbit.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/drivers/test_impl_rabbit.py
--- old/oslo.messaging-12.5.0/oslo_messaging/tests/drivers/test_impl_rabbit.py  
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/tests/drivers/test_impl_rabbit.py  
2021-02-16 10:01:45.000000000 +0100
@@ -33,6 +33,7 @@
 from oslo_messaging._drivers import impl_rabbit as rabbit_driver
 from oslo_messaging.exceptions import MessageDeliveryFailure
 from oslo_messaging.tests import utils as test_utils
+from oslo_messaging.transport import DriverLoadFailure
 from unittest import mock
 
 load_tests = testscenarios.load_tests_apply_scenarios
@@ -143,6 +144,20 @@
 
         self.assertIsInstance(driver, rabbit_driver.RabbitDriver)
 
+    @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection'
+                '.ensure_connection')
+    @mock.patch('oslo_messaging._drivers.impl_rabbit.Connection.reset')
+    def test_driver_load_max_less_than_min(self, fake_ensure, fake_reset):
+        self.config(
+            rpc_conn_pool_size=1, conn_pool_min_size=2,
+            group='oslo_messaging_rabbit')
+        self.messaging_conf.transport_url = self.transport_url
+        error = self.assertRaises(
+            DriverLoadFailure, oslo_messaging.get_transport, self.conf)
+        self.assertIn(
+            "rpc_conn_pool_size: 1 must be greater than or equal "
+            "to conn_pool_min_size: 2", str(error))
+
 
 class TestRabbitDriverLoadSSL(test_utils.BaseTestCase):
     scenarios = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/functional/utils.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/functional/utils.py
--- old/oslo.messaging-12.5.0/oslo_messaging/tests/functional/utils.py  
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/tests/functional/utils.py  
2021-02-16 10:01:45.000000000 +0100
@@ -130,7 +130,7 @@
     def _stop(self):
         self.thread.stop()
         self.thread.join(timeout=30)
-        if self.thread.isAlive():
+        if self.thread.is_alive():
             raise Exception("Server did not shutdown correctly")
 
     def ping(self, ctxt):
@@ -280,13 +280,13 @@
 
     def match(self, actual):
         errors = InvalidDistribution(self.original, actual)
-        received = [[i for i in l] for l in actual]
+        received = [[idx for idx in act] for act in actual]
 
         def _remove(obj, lists):
-            for l in lists:
-                if obj in l:
-                    front = l[0]
-                    l.remove(obj)
+            for li in lists:
+                if obj in li:
+                    front = li[0]
+                    li.remove(obj)
                     return front
             return None
 
@@ -296,8 +296,8 @@
                 errors.missing += item
             elif item != o:
                 errors.wrong_order.append([item, o])
-        for l in received:
-            errors.extra += l
+        for li in received:
+            errors.extra += li
         return errors or None
 
 
@@ -356,7 +356,7 @@
     def _stop(self):
         self.thread.stop()
         self.thread.join(timeout=30)
-        if self.thread.isAlive():
+        if self.thread.is_alive():
             raise Exception("Server did not shutdown properly")
 
     def notifier(self, publisher, topics=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/notify/test_listener.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/notify/test_listener.py
--- old/oslo.messaging-12.5.0/oslo_messaging/tests/notify/test_listener.py      
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/tests/notify/test_listener.py      
2021-02-16 10:01:45.000000000 +0100
@@ -42,7 +42,7 @@
         if self.thread is not None:
             self.thread.stop()
             self.thread.join(timeout=15)
-            ret = self.thread.isAlive()
+            ret = self.thread.is_alive()
             self.thread = None
             return ret
         return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/notify/test_notifier.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/notify/test_notifier.py
--- old/oslo.messaging-12.5.0/oslo_messaging/tests/notify/test_notifier.py      
2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/oslo_messaging/tests/notify/test_notifier.py      
2021-02-16 10:01:45.000000000 +0100
@@ -1,4 +1,3 @@
-
 # Copyright 2013 Red Hat, Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/oslo_messaging/tests/test_exception_serialization.py 
new/oslo.messaging-12.7.1/oslo_messaging/tests/test_exception_serialization.py
--- 
old/oslo.messaging-12.5.0/oslo_messaging/tests/test_exception_serialization.py  
    2020-09-11 21:18:07.000000000 +0200
+++ 
new/oslo.messaging-12.7.1/oslo_messaging/tests/test_exception_serialization.py  
    2021-02-16 10:01:45.000000000 +0100
@@ -198,9 +198,9 @@
               args=[],
               kwargs={},
               str=("Remote error: NovaStyleException test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               msg=("Remote error: NovaStyleException test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               remote_name='RemoteError',
               remote_args=(),
               remote_kwargs={'exc_type': 'NovaStyleException',
@@ -214,9 +214,9 @@
               args=[],
               kwargs={},
               str=("Remote error: Exception test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               msg=("Remote error: Exception test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               remote_name='RemoteError',
               remote_args=(),
               remote_kwargs={'exc_type': 'Exception',
@@ -230,9 +230,9 @@
               args=[],
               kwargs={},
               str=("Remote error: FarcicalError test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               msg=("Remote error: FarcicalError test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               remote_name='RemoteError',
               remote_args=(),
               remote_kwargs={'exc_type': 'FarcicalError',
@@ -246,9 +246,9 @@
               args=[],
               kwargs={'foobar': 'blaa'},
               str=("Remote error: Exception test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               msg=("Remote error: Exception test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               remote_name='RemoteError',
               remote_args=(),
               remote_kwargs={'exc_type': 'Exception',
@@ -262,9 +262,9 @@
               args=[],
               kwargs={},
               str=("Remote error: SystemExit test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               msg=("Remote error: SystemExit test\n"
-                   "[%r]." % u'traceback\ntraceback\n'),
+                   "[%r]." % 'traceback\ntraceback\n'),
               remote_name='RemoteError',
               remote_args=(),
               remote_kwargs={'exc_type': 'SystemExit',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/releasenotes/notes/disable-mandatory-flag-a6210a534f3853f0.yaml
 
new/oslo.messaging-12.7.1/releasenotes/notes/disable-mandatory-flag-a6210a534f3853f0.yaml
--- 
old/oslo.messaging-12.5.0/releasenotes/notes/disable-mandatory-flag-a6210a534f3853f0.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.messaging-12.7.1/releasenotes/notes/disable-mandatory-flag-a6210a534f3853f0.yaml
   2021-02-16 10:01:45.000000000 +0100
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Deprecating the ``direct_mandatory_flag``. It will not be possible to
+    deactivate this functionality anymore.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/releasenotes/notes/handle-missing-queue-553a803f94976be7.yaml
 
new/oslo.messaging-12.7.1/releasenotes/notes/handle-missing-queue-553a803f94976be7.yaml
--- 
old/oslo.messaging-12.5.0/releasenotes/notes/handle-missing-queue-553a803f94976be7.yaml
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.messaging-12.7.1/releasenotes/notes/handle-missing-queue-553a803f94976be7.yaml
     2021-02-16 10:01:45.000000000 +0100
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adding retry strategy based on the mandatory flag. Missing exchanges and
+    queues are now identified separately for logging purposes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
 
new/oslo.messaging-12.7.1/releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
--- 
old/oslo.messaging-12.5.0/releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/oslo.messaging-12.7.1/releasenotes/notes/run-heartbeat-in-pthread-by-default-28637b41ebf500dc.yaml
      2021-02-16 10:01:45.000000000 +0100
@@ -0,0 +1,10 @@
+---
+upgrade:
+  - |
+    The ``[oslo_messaging_rabbit] heartbeat_in_pthread`` config option now
+    defaults to ``True``.
+    Applications will run RabbitMQ heartbeat in a Python thread by default.
+deprecations:
+  - |
+    ``heartbeat_in_pthread`` has been deprecated and will be removed in a
+    future release. If configured, this option should be unset.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/releasenotes/source/conf.py 
new/oslo.messaging-12.7.1/releasenotes/source/conf.py
--- old/oslo.messaging-12.5.0/releasenotes/source/conf.py       2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/releasenotes/source/conf.py       2021-02-16 
10:01:45.000000000 +0100
@@ -27,7 +27,7 @@
 
 # -- Project information --------------------------------------------------
 # General information about the project.
-copyright = u'2016, oslo.messaging Developers'
+copyright = '2016, oslo.messaging Developers'
 
 # Release notes do not need a version in the title, they span
 # multiple versions.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/releasenotes/source/index.rst 
new/oslo.messaging-12.7.1/releasenotes/source/index.rst
--- old/oslo.messaging-12.5.0/releasenotes/source/index.rst     2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/releasenotes/source/index.rst     2021-02-16 
10:01:45.000000000 +0100
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     unreleased
+    victoria
     ussuri
     train
     stein
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/oslo.messaging-12.5.0/releasenotes/source/victoria.rst 
new/oslo.messaging-12.7.1/releasenotes/source/victoria.rst
--- old/oslo.messaging-12.5.0/releasenotes/source/victoria.rst  1970-01-01 
01:00:00.000000000 +0100
+++ new/oslo.messaging-12.7.1/releasenotes/source/victoria.rst  2021-02-16 
10:01:45.000000000 +0100
@@ -0,0 +1,6 @@
+=============================
+Victoria Series Release Notes
+=============================
+
+.. release-notes::
+   :branch: stable/victoria
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/test-requirements.txt 
new/oslo.messaging-12.7.1/test-requirements.txt
--- old/oslo.messaging-12.5.0/test-requirements.txt     2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/test-requirements.txt     2021-02-16 
10:01:45.000000000 +0100
@@ -7,6 +7,7 @@
 
 fixtures>=3.0.0 # Apache-2.0/BSD
 stestr>=2.0.0 # Apache-2.0
+pre-commit>=2.6.0 # MIT
 testscenarios>=0.4 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
 oslotest>=3.2.0 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/tools/simulator.py 
new/oslo.messaging-12.7.1/tools/simulator.py
--- old/oslo.messaging-12.5.0/tools/simulator.py        2020-09-11 
21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/tools/simulator.py        2021-02-16 
10:01:45.000000000 +0100
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
 #    a copy of the License at
@@ -10,8 +11,12 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import eventlet  # noqa
-eventlet.monkey_patch()  # noqa
+try:
+    # Avoid https://github.com/PyCQA/pycodestyle/issues/472
+    import eventlet
+    eventlet.monkey_patch()
+except ImportError:
+    raise
 
 import argparse
 import bisect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/oslo.messaging-12.5.0/tox.ini 
new/oslo.messaging-12.7.1/tox.ini
--- old/oslo.messaging-12.5.0/tox.ini   2020-09-11 21:18:07.000000000 +0200
+++ new/oslo.messaging-12.7.1/tox.ini   2021-02-16 10:01:45.000000000 +0100
@@ -1,6 +1,6 @@
 [tox]
 minversion = 3.1
-envlist = py38,pep8
+envlist = py3,pep8
 ignore_basepython_conflict = true
 
 [testenv]
@@ -12,14 +12,14 @@
           REQUIREMENTS_PIP_LOCATION
 install_command = pip install {opts} {packages}
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+  
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
 commands = stestr run --slowest {posargs}
 
 [testenv:pep8]
 commands =
-  flake8
+  pre-commit run -a
   # run security linter
   bandit -r oslo_messaging -x tests -n5
 
@@ -54,22 +54,19 @@
 # scenario03      amqp     rabbit
 # scenario04      amqp     kafka
 #
-[testenv:py36-func-scenario01]
-basepython = python3.6
+[testenv:py38-func-scenario01]
 setenv =
     {[testenv]setenv}
     SCENARIO=scenario01
 commands = {toxinidir}/tools/setup-scenario-env.sh stestr run --slowest 
{posargs:oslo_messaging.tests.functional}
 
-[testenv:py36-func-scenario02]
-basepython = python3.6
+[testenv:py38-func-scenario02]
 setenv =
     {[testenv]setenv}
     SCENARIO=scenario02
 commands = {toxinidir}/tools/setup-scenario-env.sh stestr run --slowest 
{posargs:oslo_messaging.tests.functional}
 
-[testenv:py36-func-scenario03]
-basepython = python3.6
+[testenv:py38-func-scenario03]
 setenv =
     {[testenv]setenv}
     SCENARIO=scenario03
@@ -77,8 +74,7 @@
     WORKDIR={toxworkdir}
 commands = {toxinidir}/tools/setup-scenario-env.sh stestr run --slowest 
{posargs:oslo_messaging.tests.functional}
 
-[testenv:py36-func-scenario04]
-basepython = python3.6
+[testenv:py38-func-scenario04]
 setenv =
     {[testenv]setenv}
     SCENARIO=scenario04

Reply via email to