Specified Content-Length in update request header

While uploading a Volume to an image, the HTTPConnection's request method does
not set the Content-Length header (since the volume file is a sym link i.e. the
os.fstat call returns a st_size of 0). This causes Volume uploads to Glance
fail (since the image data is ignored as no content-length is specified).
Therefore setting the Content-Length from update( ) method if the image data is
provided.

Fixes LP: #1045824

Change-Id: If259fc5a338e3e90214a52b773132ed901691c0f
This commit is contained in:
Unmesh Gurjar
2012-09-06 00:36:38 -07:00
parent 7402590255
commit 30d8e1b97c
2 changed files with 3 additions and 3 deletions

View File

@@ -218,16 +218,16 @@ class ImageManager(base.Manager):
TODO(bcwaldon): document accepted params
"""
hdrs = {}
image_data = kwargs.pop('data', None)
if image_data is not None:
image_size = self._get_file_size(image_data)
if image_size != 0:
kwargs.setdefault('size', image_size)
hdrs['Content-Length'] = image_size
else:
image_data = None
hdrs = {}
try:
purge_props = 'true' if kwargs.pop('purge_props') else 'false'
except KeyError:

View File

@@ -390,7 +390,7 @@ class ImageManagerTest(unittest.TestCase):
def test_update_with_data(self):
image_data = StringIO.StringIO('XXX')
self.mgr.update('1', data=image_data)
expect_headers = {'x-image-meta-size': '3'}
expect_headers = {'x-image-meta-size': '3', 'Content-Length': 3}
expect = [('PUT', '/v1/images/1', expect_headers, image_data)]
self.assertEqual(self.api.calls, expect)