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:
Monty Taylor
2016-04-08 14:20:52 -05:00
parent d8966d5567
commit 19bbb7bbf4
2 changed files with 8 additions and 2 deletions

View File

@@ -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(

View File

@@ -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))