[Openstack] olso-messaging times out after reconnecting to rabbit

Xav Paice xavpaice at gmail.com
Sun Jul 6 08:03:23 UTC 2014


Just in case you haven't seen
https://bugs.launchpad.net/nova/+bug/856764, this behaviour sounds very
much like it could be related.  It's worth reading the history since
there's workarounds, and further explanation of the nature of the problem.


On 06/07/14 12:02, Noel Burton-Krahn wrote:
> Icehouse
> oslo-messaging 1.3.0
> rabbitmq-server 3.1.3
>
> We've noticed that nova rpc calls fail often after rabbit restarts.
>  I've tracked it down to oslo/rabbit/kombu timing out if it's forced
> to reconnect to rabbit.  The code below times out waiting for a reply
> if the topic has been used in a previous run.  The reply always
> arrives the first time a topic is used, or if the topic is none.  But,
> the second run with the same topic will hang with this error:
>
>     MessagingTimeout: Timed out waiting for a reply to message ID ...
>
>
> This problem seems too basic to not be caught earlier in oslo, but the
> program below does really reproduce the same symptoms we see in nova
> when run against a live rabbit server.  What's wrong with this picture?
>
>
> Cheers
> --
> Noel
>
>
> #! /usr/bin/python
>
> from oslo.config import cfg
> import threading
> from oslo import messaging
> import logging
> import time
> log = logging.getLogger(__name__)
>
> class OsloTest():
>     def test(self):
>         # The code below times out waiting for a reply if the topic
>         # has been used in a previous run.  The reply always arrives
>         # the first time a topic is used, or if the topic is none.
>         # But, the second run with the same topic will hang with this
>         # error:
>         #
>         # MessagingTimeout: Timed out waiting for a reply to message
> ID ...
>         #
>         topic  = 'will_hang_on_second_usage'
>         #topic  = None # never hangs
>
>         url = "%(proto)s://%(user)s:%(password)s@%(host)s/" % dict(
>             proto = 'rabbit',
>             host = '1.2.3.4',
>             password = 'xxxxxxxx',
>             user = 'rabbit-mq-user',
>             )
>         transport = messaging.get_transport(cfg.CONF, url)
>         driver = transport._driver
>
>         target = messaging.Target(topic=topic)
>         listener = driver.listen(target)
>         ctxt={"context": True}
>         timeout = 10
>
>         def send_main():
>             log.debug("sending msg")
>             reply = driver.send(target,
>                                 ctxt,
>                                 {'send': 1},
>                                 wait_for_reply=True,
>                                 timeout=timeout)
>
>             # times out if topic was not None and used before
>             log.debug("received reply=%r" % (reply,))
>
>         send_thread = threading.Thread(target=send_main)
>         send_thread.daemon = True
>         send_thread.start()
>
>         msg = listener.poll()
>         log.debug("received msg=%r" % (msg,))
>
>         msg.reply({'reply': 1})
>
>         log.debug("sent reply")
>
>         send_thread.join()
>
> if __name__ == '__main__':
>     FORMAT = '%(asctime)-15s %(process)5d %(thread)5d %(filename)s
> %(funcName)s %(message)s'
>     logging.basicConfig(level=logging.DEBUG, format=FORMAT)
>     OsloTest().test()
>
>
> _______________________________________________
> Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
> Post to     : openstack at lists.openstack.org
> Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack/attachments/20140706/f3c1861a/attachment.html>


More information about the Openstack mailing list