From 9cb803ee1068f05eb1c8e9ce332087c869dad127 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin <markmc@redhat.com> Date: Sun, 16 Jun 2013 12:23:11 +0100 Subject: [PATCH] Fix fake driver with eventlet By storing the reply_q on the listener, we were assuming there was only one message being dispatched at the time. Put it on the incoming message instead and use it directly in reply(). --- oslo/messaging/_drivers/impl_fake.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/oslo/messaging/_drivers/impl_fake.py b/oslo/messaging/_drivers/impl_fake.py index 3a65cf30e..96b4e5b8e 100644 --- a/oslo/messaging/_drivers/impl_fake.py +++ b/oslo/messaging/_drivers/impl_fake.py @@ -35,8 +35,14 @@ class InvalidTarget(base.TransportDriverError, ValueError): class FakeIncomingMessage(base.IncomingMessage): + def __init__(self, listener, ctxt, message, reply_q): + super(FakeIncomingMessage, self).__init__(listener, ctxt, message) + self._reply_q = reply_q + def reply(self, reply=None, failure=None): - self.listener._deliver_reply(reply, failure) + # FIXME: handle failure + if self._reply_q: + self._reply_q.put(reply) def done(self): pass @@ -48,18 +54,11 @@ class FakeListener(base.Listener): super(FakeListener, self).__init__(driver, target) self._exchange = exchange - def _deliver_reply(self, reply=None, failure=None): - # FIXME: handle failure - if self._reply_q: - self._reply_q.put(reply) - def poll(self): - self._reply_q = None while True: (ctxt, message, reply_q) = self._exchange.poll(self.target) if message is not None: - self._reply_q = reply_q - return FakeIncomingMessage(self, ctxt, message) + return FakeIncomingMessage(self, ctxt, message, reply_q) time.sleep(.05)