Merge "Enable retry_on_ratelimit by default"

This commit is contained in:
Zuul 2022-08-19 00:42:56 +00:00 committed by Gerrit Code Review
commit 3b30f155a7
3 changed files with 9 additions and 5 deletions

@ -1646,7 +1646,7 @@ class Connection:
starting_backoff=1, max_backoff=64, tenant_name=None, starting_backoff=1, max_backoff=64, tenant_name=None,
os_options=None, auth_version="1", cacert=None, os_options=None, auth_version="1", cacert=None,
insecure=False, cert=None, cert_key=None, insecure=False, cert=None, cert_key=None,
ssl_compression=True, retry_on_ratelimit=False, ssl_compression=True, retry_on_ratelimit=True,
timeout=None, session=None, force_auth_retry=False): timeout=None, session=None, force_auth_retry=False):
""" """
:param authurl: authentication URL :param authurl: authentication URL
@ -1678,9 +1678,9 @@ class Connection:
will be made. This may provide a performance will be made. This may provide a performance
increase for https upload/download operations. increase for https upload/download operations.
:param retry_on_ratelimit: by default, a ratelimited connection will :param retry_on_ratelimit: by default, a ratelimited connection will
raise an exception to the caller. Setting retry after a backoff. Setting this
this parameter to True will cause a retry parameter to False will cause an exception
after a backoff. to be raised to the caller.
:param timeout: The connect timeout for the HTTP connection. :param timeout: The connect timeout for the HTTP connection.
:param session: A keystoneauth session object. :param session: A keystoneauth session object.
:param force_auth_retry: reset auth info even if client got unexpected :param force_auth_retry: reset auth info even if client got unexpected

@ -155,6 +155,7 @@ def _build_default_global_options():
"user": environ.get('ST_USER'), "user": environ.get('ST_USER'),
"key": environ.get('ST_KEY'), "key": environ.get('ST_KEY'),
"retries": 5, "retries": 5,
"retry_on_ratelimit": True,
"force_auth_retry": False, "force_auth_retry": False,
"os_username": environ.get('OS_USERNAME'), "os_username": environ.get('OS_USERNAME'),
"os_user_id": environ.get('OS_USER_ID'), "os_user_id": environ.get('OS_USER_ID'),
@ -270,10 +271,12 @@ def get_conn(options):
""" """
Return a connection building it from the options. Return a connection building it from the options.
""" """
options = dict(_default_global_options, **options)
return Connection(options['auth'], return Connection(options['auth'],
options['user'], options['user'],
options['key'], options['key'],
timeout=options.get('timeout'), timeout=options.get('timeout'),
retry_on_ratelimit=options['retry_on_ratelimit'],
retries=options['retries'], retries=options['retries'],
auth_version=options['auth_version'], auth_version=options['auth_version'],
os_options=options['os_options'], os_options=options['os_options'],

@ -2149,7 +2149,8 @@ class TestConnection(MockHttpTest):
c.http_connection = self.fake_http_connection( c.http_connection = self.fake_http_connection(
200, 498, 200, 498,
headers=auth_resp_headers) headers=auth_resp_headers)
conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf') conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf',
retry_on_ratelimit=False)
with self.assertRaises(c.ClientException) as exc_context: with self.assertRaises(c.ClientException) as exc_context:
conn.head_account() conn.head_account()
self.assertIn('Account HEAD failed', str(exc_context.exception)) self.assertIn('Account HEAD failed', str(exc_context.exception))