Merge "Add retry and debug logs to NoAuthClient of placement client"

This commit is contained in:
Zuul 2019-10-23 00:34:06 +00:00 committed by Gerrit Code Review
commit 81621f11b2

View File

@ -15,6 +15,7 @@
import functools import functools
import re import re
import time
import uuid import uuid
import requests import requests
@ -86,6 +87,7 @@ class NoAuthClient(object):
# TODO(lajoskatona): use perhaps http_connect_timeout from # TODO(lajoskatona): use perhaps http_connect_timeout from
# keystone_authtoken group # keystone_authtoken group
self.timeout = 5 self.timeout = 5
self.retries = 2
def request(self, url, method, body=None, headers=None, **kwargs): def request(self, url, method, body=None, headers=None, **kwargs):
headers = headers or {} headers = headers or {}
@ -98,20 +100,28 @@ class NoAuthClient(object):
# jsonification again, so better to create the json here and give it # jsonification again, so better to create the json here and give it
# to requests with the data parameter. # to requests with the data parameter.
body = jsonutils.dumps(body, cls=UUIDEncoder) body = jsonutils.dumps(body, cls=UUIDEncoder)
try: for i in range(self.retries):
resp = requests.request( try:
method, resp = requests.request(
url, method,
data=body, url,
headers=headers, data=body,
verify=False, headers=headers,
timeout=self.timeout, verify=False,
**kwargs) timeout=self.timeout,
return resp **kwargs)
return resp
except requests.Timeout:
LOG.exception('requests Timeout, let\'s retry it...')
except requests.ConnectionError:
LOG.exception('Connection Error appeared')
except requests.RequestException as e:
LOG.exception('Some really weird thing happened, let\'s '
'retry it')
time.sleep(self.timeout)
# Note(lajoskatona): requests raise ConnectionError, but # Note(lajoskatona): requests raise ConnectionError, but
# PlacementReportPlugin expects keystonauth1 HttpError. # PlacementReportPlugin expects keystonauth1 HttpError.
except requests.ConnectionError: raise ks_exc.HttpError
raise ks_exc.HttpError
def get(self, url, endpoint_filter, **kwargs): def get(self, url, endpoint_filter, **kwargs):
return self.request('%s%s' % (self.url, url), 'GET', **kwargs) return self.request('%s%s' % (self.url, url), 'GET', **kwargs)