Introduced timeout to post method of HttpClient 53/42453/6
authorMaciej Skrocki <maciej.skrocki@intel.com>
Tue, 19 Sep 2017 21:00:53 +0000 (14:00 -0700)
committerRoss Brattain <ross.b.brattain@intel.com>
Thu, 21 Sep 2017 00:41:31 +0000 (00:41 +0000)
We seen cases where grafana container bring-up code would fail,
because of too quick access to the http api. Added 10sec timeout
for the first query of the API.

Change-Id: Ifc95a626d0ab5552a1f26fb167fc3f65791392d7
Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
api/resources/v1/env.py
yardstick/common/httpClient.py

index 47ea916..04cc659 100644 (file)
@@ -123,7 +123,7 @@ class V1Env(ApiResource):
             "isDefault": True,
         }
         try:
-            HttpClient().post(url, data)
+            HttpClient().post(url, data, timeout=10)
         except Exception:
             LOG.exception('Create datasources failed')
             raise
index 11c2d75..54f7be6 100644 (file)
@@ -9,6 +9,7 @@
 from __future__ import absolute_import
 
 import logging
+import time
 
 from oslo_serialization import jsonutils
 import requests
@@ -18,18 +19,21 @@ logger = logging.getLogger(__name__)
 
 class HttpClient(object):
 
-    def post(self, url, data):
+    def post(self, url, data, timeout=0):
         data = jsonutils.dump_as_bytes(data)
         headers = {'Content-Type': 'application/json'}
-        try:
-            response = requests.post(url, data=data, headers=headers)
-            result = response.json()
-            logger.debug('The result is: %s', result)
-
-            return result
-        except Exception as e:
-            logger.debug('Failed: %s', e)
-            raise
+        t_end = time.time() + timeout
+        while True:
+            try:
+                response = requests.post(url, data=data, headers=headers)
+                result = response.json()
+                logger.debug('The result is: %s', result)
+                return result
+            except Exception:
+                if time.time() > t_end:
+                    logger.exception('')
+                    raise
+            time.sleep(1)
 
     def get(self, url):
         response = requests.get(url)