diff --git a/neutron/plugins/nicira/api_client/request.py b/neutron/plugins/nicira/api_client/request.py index 4cc00f8688..a450e325b1 100644 --- a/neutron/plugins/nicira/api_client/request.py +++ b/neutron/plugins/nicira/api_client/request.py @@ -21,6 +21,7 @@ from abc import ABCMeta from abc import abstractmethod import copy +import eventlet import httplib import logging import time @@ -186,7 +187,8 @@ class NvpApiRequest(object): LOG.info(_("[%(rid)d] Redirecting request to: %(conn)s"), {'rid': self._rid(), 'conn': self._request_str(conn, url)}) - + # yield here, just in case we are not out of the loop yet + eventlet.greenthread.sleep(0) # If we receive any of these responses, then # our server did not process our request and may be in an # errored state. Raise an exception, which will cause the diff --git a/neutron/plugins/nicira/api_client/request_eventlet.py b/neutron/plugins/nicira/api_client/request_eventlet.py index 0902feb68c..2097ea1c58 100644 --- a/neutron/plugins/nicira/api_client/request_eventlet.py +++ b/neutron/plugins/nicira/api_client/request_eventlet.py @@ -139,9 +139,10 @@ class NvpApiRequestEventlet(request.NvpApiRequest): attempt = 0 response = None while response is None and attempt <= self._retries: + eventlet.greenthread.sleep(0) attempt += 1 - req = self.spawn(self._issue_request).wait() + req = self._issue_request() # automatically raises any exceptions returned. if isinstance(req, httplib.HTTPResponse): if attempt <= self._retries and not self._abort: