diff --git a/doc/source/statuses.rst b/doc/source/statuses.rst index 431913639a..0dd1fc3581 100644 --- a/doc/source/statuses.rst +++ b/doc/source/statuses.rst @@ -22,7 +22,8 @@ Images in Glance can be in one the following statuses: * ``queued`` The image identifier has been reserved for an image in the Glance - registry. No image data has been uploaded to Glance. + registry. No image data has been uploaded to Glance and the image + size was not explicitly set to zero on creation. * ``saving`` @@ -34,7 +35,9 @@ Images in Glance can be in one the following statuses: * ``active`` - Denotes an image that is fully available in Glance. + Denotes an image that is fully available in Glance. This occurs when + the image data is uploaded, or the image size is explicitly set to + zero on creation. * ``killed`` diff --git a/glance/api/v1/images.py b/glance/api/v1/images.py index e295f42aa1..e5445c4350 100644 --- a/glance/api/v1/images.py +++ b/glance/api/v1/images.py @@ -272,8 +272,11 @@ class Controller(controller.BaseController): self._enforce(req, 'get_image') image_meta = self.get_active_image_meta_or_404(req, id) - image_iterator, size = self._get_from_store(image_meta['location']) - image_meta['size'] = size or image_meta['size'] + if image_meta.get('size') == 0: + image_iterator = iter([]) + else: + image_iterator, size = self._get_from_store(image_meta['location']) + image_meta['size'] = size or image_meta['size'] del image_meta['location'] return { @@ -295,6 +298,10 @@ class Controller(controller.BaseController): :raises HTTPBadRequest if image metadata is not valid """ location = self._external_source(image_meta, req) + + image_meta['status'] = ('active' if image_meta.get('size') == 0 + else 'queued') + if location: store = get_store_from_location(location) # check the store exists before we hit the registry, but we @@ -309,8 +316,6 @@ class Controller(controller.BaseController): # to a non-zero value during upload image_meta['size'] = image_meta.get('size', 0) - image_meta['status'] = 'queued' - try: image_meta = registry.add_image_metadata(req.context, image_meta) return image_meta