Add caching of get_auth call in Swift
Should make calls significantly faster for our Swift customers Fixes https://jira.prod.coreos.systems/browse/QS-39
This commit is contained in:
parent
dcec90649e
commit
ffaff5a27e
2 changed files with 38 additions and 9 deletions
|
@ -8,6 +8,7 @@ from mock import MagicMock
|
|||
|
||||
from storage import StorageContext
|
||||
from storage.swift import SwiftStorage
|
||||
from swiftclient.client import ClientException
|
||||
|
||||
base_args = {
|
||||
'context': StorageContext('nyc', None, None, None, None),
|
||||
|
@ -27,18 +28,26 @@ class MockSwiftStorage(SwiftStorage):
|
|||
return self._connection
|
||||
|
||||
class FakeSwiftStorage(SwiftStorage):
|
||||
def __init__(self, fail_checksum=False, connection=None, *args, **kwargs):
|
||||
def __init__(self, fail_checksum=False,connection=None, *args, **kwargs):
|
||||
super(FakeSwiftStorage, self).__init__(*args, **kwargs)
|
||||
self._connection = connection or FakeSwift(fail_checksum=fail_checksum)
|
||||
self._connection = connection or FakeSwift(fail_checksum=fail_checksum,
|
||||
temp_url_key=kwargs.get('temp_url_key'))
|
||||
|
||||
def _get_connection(self):
|
||||
return self._connection
|
||||
|
||||
|
||||
class FakeSwift(object):
|
||||
def __init__(self, fail_checksum=False):
|
||||
def __init__(self, fail_checksum=False, temp_url_key=None):
|
||||
self.containers = defaultdict(dict)
|
||||
self.fail_checksum = fail_checksum
|
||||
self.temp_url_key = temp_url_key
|
||||
|
||||
def get_auth(self):
|
||||
if self.temp_url_key == 'exception':
|
||||
raise ClientException('I failed!')
|
||||
|
||||
return 'http://fake/swift', None
|
||||
|
||||
def head_object(self, container, path):
|
||||
return self.containers[container].get(path)
|
||||
|
@ -258,3 +267,13 @@ def test_empty_chunks_queued_for_deletion():
|
|||
|
||||
found2 = chunk_cleanup_queue.get()
|
||||
assert found2 is None
|
||||
|
||||
@pytest.mark.parametrize('temp_url_key, expects_url', [
|
||||
(None, False),
|
||||
('foobarbaz', True),
|
||||
('exception', False),
|
||||
])
|
||||
def test_get_direct_download_url(temp_url_key, expects_url):
|
||||
swift = FakeSwiftStorage(temp_url_key=temp_url_key, **base_args)
|
||||
swift.put_content('somepath', 'hello world!')
|
||||
assert (swift.get_direct_download_url('somepath') is not None) == expects_url
|
||||
|
|
Reference in a new issue