Set min_segment_size from the swift capabilities
Older swifts have a minimum limit on how small a segment can be in an Large Object. This is no longer needed in current OpenStack, but is important in old OpenStack. Change-Id: Iff83506d276b236c2ce3b078b3fbd9533c912b07
This commit is contained in:
@@ -3977,6 +3977,7 @@ class OpenStackCloud(object):
|
||||
'''get a segment size that will work given capabilities'''
|
||||
if segment_size is None:
|
||||
segment_size = DEFAULT_OBJECT_SEGMENT_SIZE
|
||||
min_segment_size = 0
|
||||
try:
|
||||
caps = self.get_object_capabilities()
|
||||
except swift_exceptions.ClientException as e:
|
||||
@@ -3991,9 +3992,12 @@ class OpenStackCloud(object):
|
||||
else:
|
||||
server_max_file_size = caps.get('swift', {}).get('max_file_size',
|
||||
0)
|
||||
min_segment_size = caps.get('slo', {}).get('min_segment_size', 0)
|
||||
|
||||
if segment_size > server_max_file_size:
|
||||
return server_max_file_size
|
||||
if segment_size < min_segment_size:
|
||||
return min_segment_size
|
||||
return segment_size
|
||||
|
||||
def is_object_stale(
|
||||
|
||||
@@ -64,8 +64,10 @@ class TestObject(base.TestCase):
|
||||
|
||||
@mock.patch.object(shade.OpenStackCloud, 'swift_client')
|
||||
def test_get_object_segment_size(self, swift_mock):
|
||||
swift_mock.get_capabilities.return_value = {'swift':
|
||||
{'max_file_size': 1000}}
|
||||
swift_mock.get_capabilities.return_value = {
|
||||
'swift': {'max_file_size': 1000},
|
||||
'slo': {'min_segment_size': 500}}
|
||||
self.assertEqual(500, self.cloud.get_object_segment_size(400))
|
||||
self.assertEqual(900, self.cloud.get_object_segment_size(900))
|
||||
self.assertEqual(1000, self.cloud.get_object_segment_size(1000))
|
||||
self.assertEqual(1000, self.cloud.get_object_segment_size(1100))
|
||||
|
||||
Reference in New Issue
Block a user