Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:ARM
openstack-glance
lp_845788_glance_client_zero_length.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File lp_845788_glance_client_zero_length.patch of Package openstack-glance
Origin: upstream, https://github.com/openstack/glance/commit/6cfff16f2dc22a870bfe3808a7895dfbbaa11369 Bug: https://bugs.launchpad.net/glance/+bug/845788 commit 6cfff16f2dc22a870bfe3808a7895dfbbaa11369 Author: Jay Pipes <jaypipes@gmail.com> Date: Fri Sep 9 13:03:19 2011 -0400 Fixes LP Bug#845788 glance.client.image_update needed to calculate size so that Glance's Swift driver can do chunking properly for large objects. Change-Id: Iafe8034a710cff53a0caa3ae5e9ee3a3adda19f8 --- a/glance/client.py +++ b/glance/client.py @@ -96,6 +96,33 @@ class V1Client(base_client.BaseClient): image = utils.get_image_meta_from_headers(res) return image + def _get_image_size(self, image_data): + """ + Analyzes the incoming image file and attempts to determine + its size. + + :param image_data: The input to the client, typically a file + redirected from stdin. + :retval The image file's size or None if it cannot be determined. + """ + # For large images, we need to supply the size of the + # image file. See LP Bugs #827660 and #845788. + if hasattr(image_data, 'seek') and hasattr(image_data, 'tell'): + try: + image_data.seek(0, os.SEEK_END) + image_size = image_data.tell() + image_data.seek(0) + return image_size + except IOError, e: + if e.errno == errno.ESPIPE: + # Illegal seek. This means the user is trying + # to pipe image data to the client, e.g. + # echo testdata | bin/glance add blah..., or + # that stdin is empty + return None + else: + raise + def add_image(self, image_meta=None, image_data=None): """ Tells Glance about an image's metadata as well @@ -114,24 +141,10 @@ class V1Client(base_client.BaseClient): if image_data: body = image_data headers['content-type'] = 'application/octet-stream' - # For large images, we need to supply the size of the - # image file. See LP Bug #827660. - if hasattr(image_data, 'seek') and hasattr(image_data, 'tell'): - try: - image_data.seek(0, os.SEEK_END) - image_size = image_data.tell() - image_data.seek(0) - headers['x-image-meta-size'] = image_size - headers['content-length'] = image_size - except IOError, e: - if e.errno == errno.ESPIPE: - # Illegal seek. This means the user is trying - # to pipe image data to the client, e.g. - # echo testdata | bin/glance add blah..., or - # that stdin is empty - pass - else: - raise + image_size = self._get_image_size(image_data) + if image_size: + headers['x-image-meta-size'] = image_size + headers['content-length'] = image_size else: body = None @@ -151,6 +164,10 @@ class V1Client(base_client.BaseClient): if image_data: body = image_data headers['content-type'] = 'application/octet-stream' + image_size = self._get_image_size(image_data) + if image_size: + headers['x-image-meta-size'] = image_size + headers['content-length'] = image_size else: body = None
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor