Merge "Narrow race in wait_for_server_status()."
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 1530313..7dd3a86 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -2,9 +2,14 @@
import httplib2
import logging
import sys
+import time
from tempest import exceptions
+# redrive rate limited calls at most twice
+MAX_RECURSION_DEPTH = 2
+
+
class RestClient(object):
def __init__(self, config, user, key, auth_url, service, tenant_name=None):
@@ -107,7 +112,7 @@
self.log.error('Response Headers: ' + str(resp))
self.log.error('Response Body: ' + str(resp_body))
- def request(self, method, url, headers=None, body=None):
+ def request(self, method, url, headers=None, body=None, depth=0):
"""A simple HTTP request interface."""
self.http_obj = httplib2.Http()
@@ -138,6 +143,10 @@
self._log(req_url, body, resp, resp_body)
if 'overLimit' in resp_body:
raise exceptions.OverLimit(resp_body['overLimit']['message'])
+ elif depth < MAX_RECURSION_DEPTH:
+ delay = resp['Retry-After'] if 'Retry-After' in resp else 60
+ time.sleep(int(delay))
+ return self.request(method, url, headers, body, depth + 1)
else:
raise exceptions.RateLimitExceeded(
message=resp_body['overLimitFault']['message'],