Revert "Add retries to cinderclient."

This reverts commit 3b1eda3b3b
This commit is contained in:
John Griffith
2012-11-02 22:17:03 +00:00
committed by Gerrit Code Review
parent 3b1eda3b3b
commit dcbebd7b78
4 changed files with 19 additions and 103 deletions

View File

@@ -11,10 +11,6 @@ import httplib2
import logging
import os
import urlparse
try:
from eventlet import sleep
except ImportError:
from time import sleep
try:
import json
@@ -46,7 +42,7 @@ class HTTPClient(httplib2.Http):
timeout=None, tenant_id=None, proxy_tenant_id=None,
proxy_token=None, region_name=None,
endpoint_type='publicURL', service_type=None,
service_name=None, volume_service_name=None, retries=0):
service_name=None, volume_service_name=None):
super(HTTPClient, self).__init__(timeout=timeout)
self.user = user
self.password = password
@@ -59,7 +55,6 @@ class HTTPClient(httplib2.Http):
self.service_type = service_type
self.service_name = service_name
self.volume_service_name = volume_service_name
self.retries = retries
self.management_url = None
self.auth_token = None
@@ -116,40 +111,28 @@ class HTTPClient(httplib2.Http):
return resp, body
def _cs_request(self, url, method, **kwargs):
attempts = 0
backoff = 1
while attempts <= self.retries:
attempts += 1
if not self.management_url or not self.auth_token:
self.authenticate()
if not self.management_url:
self.authenticate()
# Perform the request once. If we get a 401 back then it
# might be because the auth token expired, so try to
# re-authenticate and try again. If it still fails, bail.
try:
kwargs.setdefault('headers', {})['X-Auth-Token'] = self.auth_token
if self.projectid:
kwargs['headers']['X-Auth-Project-Id'] = self.projectid
resp, body = self.request(self.management_url + url, method,
**kwargs)
return resp, body
except exceptions.Unauthorized, ex:
try:
self.authenticate()
resp, body = self.request(self.management_url + url, method,
**kwargs)
return resp, body
except exceptions.BadRequest as e:
# Socket errors show up here (400) when
# force_exception_to_status_code = True
if e.message != 'n/a':
raise
except exceptions.Unauthorized:
if attempts > 1:
raise
_logger.debug("Unauthorized, reauthenticating.")
self.management_url = self.auth_token = None
except exceptions.ClientException as e:
if 500 <= e.code <= 599:
pass
else:
raise
if attempts > self.retries:
raise
_logger.debug("Failed attempt(%s), retrying in %s seconds" %
(attempts, backoff))
sleep(backoff)
backoff *= 2
raise ex
def get(self, url, **kwargs):
return self._cs_request(url, 'GET', **kwargs)

View File

@@ -169,11 +169,6 @@ class OpenStackCinderShell(object):
action='store_true',
help=argparse.SUPPRESS)
parser.add_argument('--retries',
metavar='<retries>',
default=0,
help='Number of retries.')
# FIXME(dtroyer): The args below are here for diablo compatibility,
# remove them in folsum cycle
@@ -413,8 +408,7 @@ class OpenStackCinderShell(object):
extensions=self.extensions,
service_type=service_type,
service_name=service_name,
volume_service_name=volume_service_name,
retries=options.retries)
volume_service_name=volume_service_name)
try:
if not utils.isunauthenticated(args.func):

View File

@@ -27,7 +27,7 @@ class Client(object):
proxy_tenant_id=None, proxy_token=None, region_name=None,
endpoint_type='publicURL', extensions=None,
service_type='volume', service_name=None,
volume_service_name=None, retries=None):
volume_service_name=None):
# FIXME(comstud): Rename the api_key argument above when we
# know it's not being used as keyword argument
password = api_key
@@ -61,8 +61,7 @@ class Client(object):
endpoint_type=endpoint_type,
service_type=service_type,
service_name=service_name,
volume_service_name=volume_service_name,
retries=retries)
volume_service_name=volume_service_name)
def authenticate(self):
"""

View File

@@ -13,7 +13,7 @@ mock_request = mock.Mock(return_value=(fake_response, fake_body))
def get_client():
cl = client.HTTPClient("username", "password",
"project_id", "auth_test", retries=1)
"project_id", "auth_test")
return cl
@@ -44,66 +44,6 @@ class ClientTest(utils.TestCase):
test_get_call()
def test_get_retry_500(self):
cl = get_authed_client()
bad_response = httplib2.Response({"status": 500})
bad_body = '{"error": {"message": "FAILED!", "details": "DETAILS!"}}'
bad_request = mock.Mock(return_value=(bad_response, bad_body))
self.requests = [bad_request, mock_request]
def request(*args, **kwargs):
next_request = self.requests.pop(0)
return next_request(*args, **kwargs)
@mock.patch.object(httplib2.Http, "request", request)
@mock.patch('time.time', mock.Mock(return_value=1234))
def test_get_call():
resp, body = cl.get("/hi")
test_get_call()
self.assertEqual(self.requests, [])
def test_get_no_retry_400(self):
cl = get_authed_client()
bad_response = httplib2.Response({"status": 400})
bad_body = '{"error": {"message": "Bad!", "details": "Terrible!"}}'
bad_request = mock.Mock(return_value=(bad_response, bad_body))
self.requests = [bad_request, mock_request]
def request(*args, **kwargs):
next_request = self.requests.pop(0)
return next_request(*args, **kwargs)
@mock.patch.object(httplib2.Http, "request", request)
@mock.patch('time.time', mock.Mock(return_value=1234))
def test_get_call():
resp, body = cl.get("/hi")
self.assertRaises(exceptions.BadRequest, test_get_call)
self.assertEqual(self.requests, [mock_request])
def test_get_retry_400_socket(self):
cl = get_authed_client()
bad_response = httplib2.Response({"status": 400})
bad_body = '{"error": {"message": "n/a", "details": "n/a"}}'
bad_request = mock.Mock(return_value=(bad_response, bad_body))
self.requests = [bad_request, mock_request]
def request(*args, **kwargs):
next_request = self.requests.pop(0)
return next_request(*args, **kwargs)
@mock.patch.object(httplib2.Http, "request", request)
@mock.patch('time.time', mock.Mock(return_value=1234))
def test_get_call():
resp, body = cl.get("/hi")
test_get_call()
self.assertEqual(self.requests, [])
def test_post(self):
cl = get_authed_client()