From: armando-migliaccio Date: Fri, 7 Mar 2014 02:39:44 +0000 (-0800) Subject: NSX: Add ability to retry on 503's returned by the controller X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=cb99c08e968685c6f59bab2e49f86d56a2ec509d;p=openstack-build%2Fneutron-build.git NSX: Add ability to retry on 503's returned by the controller There are a number of circumstances where the NSX controller may return 503. Currently the API client does not retry, so this patch adds a retry logic with timeout. Closes-bug: #1284277 Change-Id: I85df087d5ae409e6cb5c35eb171e89346abe81f4 --- diff --git a/neutron/plugins/vmware/api_client/eventlet_request.py b/neutron/plugins/vmware/api_client/eventlet_request.py index 307e4e3e7..8986ee83f 100644 --- a/neutron/plugins/vmware/api_client/eventlet_request.py +++ b/neutron/plugins/vmware/api_client/eventlet_request.py @@ -128,17 +128,21 @@ class EventletApiRequest(request.ApiRequest): def _handle_request(self): '''First level request handling.''' attempt = 0 + timeout = 0 response = None while response is None and attempt <= self._retries: - eventlet.greenthread.sleep(0) + eventlet.greenthread.sleep(timeout) attempt += 1 req = self._issue_request() # automatically raises any exceptions returned. if isinstance(req, httplib.HTTPResponse): + timeout = 0 if attempt <= self._retries and not self._abort: - if (req.status == httplib.UNAUTHORIZED - or req.status == httplib.FORBIDDEN): + if req.status in (httplib.UNAUTHORIZED, httplib.FORBIDDEN): + continue + elif req.status == httplib.SERVICE_UNAVAILABLE: + timeout = 0.5 continue # else fall through to return the error code