Hello community,
here is the log from the commit of package python-oslo.messaging for
openSUSE:Factory checked in at 2016-12-04 15:08:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.messaging (Old)
and /work/SRC/openSUSE:Factory/.python-oslo.messaging.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.messaging"
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-oslo.messaging/python-oslo.messaging.changes
2016-10-13 11:31:27.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.python-oslo.messaging.new/python-oslo.messaging.changes
2016-12-04 15:08:25.000000000 +0100
@@ -1,0 +2,15 @@
+Sat Dec 3 17:53:05 UTC 2016 - [email protected]
+
+- update to 5.10.1:
+ * rabbit: on reconnect set socket timeout after channel is set
+ * Updated from global requirements
+ * rabbit: Avoid busy loop on epoll_wait with heartbeat+eventlet
+ * Fix consuming from unbound reply queue
+ * Update .gitreview for stable/newton
+
+-------------------------------------------------------------------
+Fri Oct 14 13:56:23 UTC 2016 - [email protected]
+
+- Switch to stable/newton in _service
+
+-------------------------------------------------------------------
Old:
----
oslo.messaging-5.10.0.tar.gz
New:
----
oslo.messaging-5.10.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-oslo.messaging.spec ++++++
--- /var/tmp/diff_new_pack.ePLKFO/_old 2016-12-04 15:08:26.000000000 +0100
+++ /var/tmp/diff_new_pack.ePLKFO/_new 2016-12-04 15:08:26.000000000 +0100
@@ -18,7 +18,7 @@
%global sname oslo.messaging
Name: python-oslo.messaging
-Version: 5.10.0
+Version: 5.10.1
Release: 0
Summary: OpenStack oslo.messaging library
License: Apache-2.0
@@ -45,7 +45,7 @@
BuildRequires: python-oslo.config >= 3.14.0
BuildRequires: python-oslo.context >= 2.9.0
BuildRequires: python-oslo.i18n >= 2.1.0
-BuildRequires: python-oslo.log >= 3.11.0
+BuildRequires: python-oslo.log >= 1.14.0
BuildRequires: python-oslo.middleware >= 3.0.0
BuildRequires: python-oslo.serialization >= 1.10.0
BuildRequires: python-oslo.service >= 1.10.0
@@ -76,7 +76,7 @@
Requires: python-oslo.config >= 3.14.0
Requires: python-oslo.context >= 2.9.0
Requires: python-oslo.i18n >= 2.1.0
-Requires: python-oslo.log >= 3.11.0
+Requires: python-oslo.log >= 1.14.0
Requires: python-oslo.middleware >= 3.0.0
Requires: python-oslo.serialization >= 1.10.0
Requires: python-oslo.service >= 1.10.0
@@ -96,7 +96,7 @@
Summary: Documentation for OpenStack messaging library
Group: Development/Languages/Python
BuildRequires: python-Sphinx
-BuildRequires: python-oslosphinx >= 4.7.0
+BuildRequires: python-oslosphinx >= 2.5.0
%description doc
The Oslo messaging API supports RPC and notifications over a number
++++++ _service ++++++
--- /var/tmp/diff_new_pack.ePLKFO/_old 2016-12-04 15:08:26.000000000 +0100
+++ /var/tmp/diff_new_pack.ePLKFO/_new 2016-12-04 15:08:26.000000000 +0100
@@ -1,8 +1,8 @@
<services>
<service mode="disabled" name="renderspec">
- <param
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/master/openstack/oslo.messaging/oslo.messaging.spec.j2</param>
+ <param
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/newton/openstack/oslo.messaging/oslo.messaging.spec.j2</param>
<param name="output-name">python-oslo.messaging.spec</param>
- <param
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/master/global-requirements.txt</param>
+ <param
name="requirements">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/newton/global-requirements.txt</param>
</service>
<service mode="disabled" name="download_files">
<param name="changesgenerate">enable</param>
++++++ oslo.messaging-5.10.0.tar.gz -> oslo.messaging-5.10.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.messaging-5.10.0/ChangeLog
new/oslo.messaging-5.10.1/ChangeLog
--- old/oslo.messaging-5.10.0/ChangeLog 2016-08-25 14:01:04.000000000 +0200
+++ new/oslo.messaging-5.10.1/ChangeLog 2016-11-22 12:50:55.000000000 +0100
@@ -1,6 +1,15 @@
CHANGES
=======
+5.10.1
+------
+
+* rabbit: on reconnect set socket timeout after channel is set
+* Updated from global requirements
+* rabbit: Avoid busy loop on epoll_wait with heartbeat+eventlet
+* Fix consuming from unbound reply queue
+* Update .gitreview for stable/newton
+
5.10.0
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.messaging-5.10.0/PKG-INFO
new/oslo.messaging-5.10.1/PKG-INFO
--- old/oslo.messaging-5.10.0/PKG-INFO 2016-08-25 14:01:04.000000000 +0200
+++ new/oslo.messaging-5.10.1/PKG-INFO 2016-11-22 12:50:55.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: oslo.messaging
-Version: 5.10.0
+Version: 5.10.1
Summary: Oslo Messaging API
Home-page: https://wiki.openstack.org/wiki/Oslo#oslo.messaging
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.messaging-5.10.0/oslo.messaging.egg-info/PKG-INFO
new/oslo.messaging-5.10.1/oslo.messaging.egg-info/PKG-INFO
--- old/oslo.messaging-5.10.0/oslo.messaging.egg-info/PKG-INFO 2016-08-25
14:01:04.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo.messaging.egg-info/PKG-INFO 2016-11-22
12:50:55.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: oslo.messaging
-Version: 5.10.0
+Version: 5.10.1
Summary: Oslo Messaging API
Home-page: https://wiki.openstack.org/wiki/Oslo#oslo.messaging
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.messaging-5.10.0/oslo.messaging.egg-info/pbr.json
new/oslo.messaging-5.10.1/oslo.messaging.egg-info/pbr.json
--- old/oslo.messaging-5.10.0/oslo.messaging.egg-info/pbr.json 2016-08-25
14:01:04.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo.messaging.egg-info/pbr.json 2016-11-22
12:50:55.000000000 +0100
@@ -1 +1 @@
-{"git_version": "4f8fcb3", "is_release": true}
\ No newline at end of file
+{"is_release": true, "git_version": "cc1ec4e"}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.messaging-5.10.0/oslo.messaging.egg-info/requires.txt
new/oslo.messaging-5.10.1/oslo.messaging.egg-info/requires.txt
--- old/oslo.messaging-5.10.0/oslo.messaging.egg-info/requires.txt
2016-08-25 14:01:04.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo.messaging.egg-info/requires.txt
2016-11-22 12:50:55.000000000 +0100
@@ -17,7 +17,7 @@
WebOb>=1.2.3
PyYAML>=3.1.0
amqp<2.0,>=1.4.0
-kombu>=3.0.25
+kombu!=4.0.0,>=3.0.25
pika>=0.10.0
pika-pool>=0.1.3
futures>=3.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.messaging-5.10.0/oslo_messaging/_drivers/impl_rabbit.py
new/oslo.messaging-5.10.1/oslo_messaging/_drivers/impl_rabbit.py
--- old/oslo.messaging-5.10.0/oslo_messaging/_drivers/impl_rabbit.py
2016-08-25 13:59:20.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo_messaging/_drivers/impl_rabbit.py
2016-11-22 12:49:09.000000000 +0100
@@ -277,6 +277,7 @@
rabbit_queue_ttl)
self.queue = None
+ self._declared_on = None
self.exchange = kombu.entity.Exchange(
name=exchange_name,
type=type,
@@ -285,6 +286,7 @@
def declare(self, conn):
"""Re-declare the queue after a rabbit (re)connect."""
+
self.queue = kombu.entity.Queue(
name=self.queue_name,
channel=conn.channel,
@@ -308,17 +310,41 @@
self.queue.declare()
else:
raise
+ self._declared_on = conn.channel
- def consume(self, tag):
+ def consume(self, conn, tag):
"""Actually declare the consumer on the amqp channel. This will
start the flow of messages from the queue. Using the
Connection.consume() will process the messages,
calling the appropriate callback.
"""
- self.queue.consume(callback=self._callback,
- consumer_tag=six.text_type(tag),
- nowait=self.nowait)
+ # Ensure we are on the correct channel before consuming
+ if conn.channel != self._declared_on:
+ self.declare(conn)
+ try:
+ self.queue.consume(callback=self._callback,
+ consumer_tag=six.text_type(tag),
+ nowait=self.nowait)
+ except conn.connection.channel_errors as exc:
+ # We retries once because of some races that we can
+ # recover before informing the deployer
+ # bugs.launchpad.net/oslo.messaging/+bug/1581148
+ # bugs.launchpad.net/oslo.messaging/+bug/1609766
+ # bugs.launchpad.net/neutron/+bug/1318721
+
+ # At any channel error, the RabbitMQ closes
+ # the channel, but the amqp-lib quietly re-open
+ # it. So, we must reset all tags and declare
+ # all consumers again.
+ conn._new_tags = set(conn._consumers.values())
+ if exc.code == 404:
+ self.declare(conn)
+ self.queue.consume(callback=self._callback,
+ consumer_tag=six.text_type(tag),
+ nowait=self.nowait)
+ else:
+ raise
def cancel(self, tag):
LOG.trace('ConsumerBase.cancel: canceling %s', tag)
@@ -751,11 +777,8 @@
"""Callback invoked when the kombu reconnects and creates
a new channel, we use it the reconfigure our consumers.
"""
-
- self.set_transport_socket_timeout()
self._set_current_channel(new_channel)
- for consumer in self._consumers:
- consumer.declare(self)
+ self.set_transport_socket_timeout()
LOG.info(_LI('[%(connection_id)s] Reconnected to AMQP server on '
'%(hostname)s:%(port)s via [%(transport)s] client'
@@ -832,6 +855,8 @@
if self.purpose == rpc_common.PURPOSE_LISTEN:
self._set_qos(new_channel)
self._producer = kombu.messaging.Producer(new_channel)
+ for consumer in self._consumers:
+ consumer.declare(self)
def _set_qos(self, channel):
"""Set QoS prefetch count on the channel"""
@@ -939,7 +964,7 @@
def _heartbeat_start(self):
if self._heartbeat_supported_and_enabled():
- self._heartbeat_exit_event = threading.Event()
+ self._heartbeat_exit_event = _utils.Event()
self._heartbeat_thread = threading.Thread(
target=self._heartbeat_thread_job)
self._heartbeat_thread.daemon = True
@@ -1042,31 +1067,11 @@
if not self.connection.connected:
raise self.connection.recoverable_connection_errors[0]
- consume_max_retries = 2
- while self._new_tags and consume_max_retries:
+ while self._new_tags:
for consumer, tag in self._consumers.items():
if tag in self._new_tags:
- try:
- consumer.consume(tag=tag)
- self._new_tags.remove(tag)
- except self.connection.channel_errors as exc:
- # NOTE(kbespalov): during the interval between
- # a queue declaration and consumer declaration
- # the queue can disappear. In this case
- # we must redeclare queue and try to re-consume.
- # More details is here:
- # bugs.launchpad.net/oslo.messaging/+bug/1581148
- if exc.code == 404 and consume_max_retries:
- consumer.declare(self)
- # NOTE(kbespalov): the broker closes a channel
- # at any channel error. The py-amqp catches
- # this situation and re-open a new channel.
- # So, we must re-declare all consumers again.
- self._new_tags = set(self._consumers.values())
- consume_max_retries -= 1
- break
- else:
- raise
+ consumer.consume(self, tag=tag)
+ self._new_tags.remove(tag)
poll_timeout = (self._poll_timeout if timeout is None
else min(timeout, self._poll_timeout))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.messaging-5.10.0/oslo_messaging/_utils.py
new/oslo.messaging-5.10.1/oslo_messaging/_utils.py
--- old/oslo.messaging-5.10.0/oslo_messaging/_utils.py 2016-08-25
13:59:20.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo_messaging/_utils.py 2016-11-22
12:49:09.000000000 +0100
@@ -15,6 +15,11 @@
import threading
+from oslo_utils import eventletutils
+from oslo_utils import importutils
+
+_eventlet = importutils.try_import('eventlet')
+
def version_is_compatible(imp_version, version):
"""Determine whether versions are compatible.
@@ -80,3 +85,38 @@
def __exit__(self, type, value, traceback):
self.release()
+
+
+class _Event(object):
+ """A class that provides consistent eventlet/threading Event API.
+
+ This wraps the eventlet.event.Event class to have the same API as
+ the standard threading.Event object.
+ """
+ def __init__(self, *args, **kwargs):
+ self.clear()
+
+ def clear(self):
+ self._set = False
+ self._event = _eventlet.event.Event()
+
+ def is_set(self):
+ return self._set
+
+ isSet = is_set
+
+ def set(self):
+ self._set = True
+ self._event.send(True)
+
+ def wait(self, timeout=None):
+ with _eventlet.timeout.Timeout(timeout, False):
+ self._event.wait()
+ return self.is_set()
+
+
+def Event():
+ if eventletutils.is_monkey_patched("thread"):
+ return _Event()
+ else:
+ return threading.Event()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.messaging-5.10.0/oslo_messaging/tests/test_utils.py
new/oslo.messaging-5.10.1/oslo_messaging/tests/test_utils.py
--- old/oslo.messaging-5.10.0/oslo_messaging/tests/test_utils.py
2016-08-25 13:59:20.000000000 +0200
+++ new/oslo.messaging-5.10.1/oslo_messaging/tests/test_utils.py
2016-11-22 12:49:09.000000000 +0100
@@ -13,9 +13,13 @@
# License for the specific language governing permissions and limitations
# under the License.
+import threading
+
from oslo_messaging._drivers import common
from oslo_messaging import _utils as utils
from oslo_messaging.tests import utils as test_utils
+
+import six
from six.moves import mock
@@ -97,3 +101,27 @@
remaining = t.check_return(callback, 1, a='b')
self.assertEqual(0, remaining)
callback.assert_called_once_with(1, a='b')
+
+
+class EventCompatTestCase(test_utils.BaseTestCase):
+ @mock.patch('oslo_messaging._utils._Event.clear')
+ def test_event_api_compat(self, mock_clear):
+ with mock.patch('oslo_utils.eventletutils.is_monkey_patched',
+ return_value=True):
+ e_event = utils.Event()
+ self.assertIsInstance(e_event, utils._Event)
+
+ with mock.patch('oslo_utils.eventletutils.is_monkey_patched',
+ return_value=False):
+ t_event = utils.Event()
+ if six.PY3:
+ t_event_cls = threading.Event
+ else:
+ t_event_cls = threading._Event
+ self.assertIsInstance(t_event, t_event_cls)
+
+ public_methods = [m for m in dir(t_event) if not m.startswith("_") and
+ callable(getattr(t_event, m))]
+
+ for method in public_methods:
+ self.assertTrue(hasattr(e_event, method))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.messaging-5.10.0/releasenotes/source/conf.py
new/oslo.messaging-5.10.1/releasenotes/source/conf.py
--- old/oslo.messaging-5.10.0/releasenotes/source/conf.py 2016-08-25
13:59:20.000000000 +0200
+++ new/oslo.messaging-5.10.1/releasenotes/source/conf.py 2016-11-22
12:49:09.000000000 +0100
@@ -274,3 +274,6 @@
# If true, do not generate a @detailmenu in the "Top" node's menu.
# texinfo_no_detailmenu = False
+
+# -- Options for Internationalization output ------------------------------
+locale_dirs = ['locale/']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.messaging-5.10.0/requirements.txt
new/oslo.messaging-5.10.1/requirements.txt
--- old/oslo.messaging-5.10.0/requirements.txt 2016-08-25 13:59:20.000000000
+0200
+++ new/oslo.messaging-5.10.1/requirements.txt 2016-11-22 12:49:09.000000000
+0100
@@ -35,7 +35,7 @@
# rabbit driver is the default
# we set the amqp version to ensure heartbeat works
amqp<2.0,>=1.4.0 # LGPL
-kombu>=3.0.25 # BSD
+kombu!=4.0.0,>=3.0.25 # BSD
pika>=0.10.0 # BSD
pika-pool>=0.1.3 # BSD