Check and handle NULL image_size

Fixes #613
This commit is contained in:
Joseph Schorr 2015-10-14 14:11:18 -04:00
parent e31dda35df
commit fe79d5fb66
2 changed files with 21 additions and 15 deletions

View file

@ -304,6 +304,9 @@ def set_image_metadata(docker_image_id, namespace_name, repository_name, created
def set_image_size(docker_image_id, namespace_name, repository_name, image_size, uncompressed_size):
if image_size is None:
raise DataModelException('Empty image size field')
try:
image = (Image
.select(Image, ImageStorage)
@ -314,7 +317,6 @@ def set_image_size(docker_image_id, namespace_name, repository_name, image_size,
.where(Repository.name == repository_name, Namespace.username == namespace_name,
Image.docker_image_id == docker_image_id)
.get())
except Image.DoesNotExist:
raise DataModelException('No image with specified id and repository')
@ -327,15 +329,17 @@ def set_image_size(docker_image_id, namespace_name, repository_name, image_size,
# TODO(jschorr): Switch to this faster route once we have full ancestor aggregate_size
# parent_image = Image.get(Image.id == ancestors[-1])
# total_size = image_size + parent_image.storage.aggregate_size
total_size = (ImageStorage
.select(fn.Sum(ImageStorage.image_size))
.join(Image)
.where(Image.id << ancestors)
.scalar()) + image_size
ancestor_size = (ImageStorage
.select(fn.Sum(ImageStorage.image_size))
.join(Image)
.where(Image.id << ancestors)
.scalar())
# TODO stop writing to storage when all readers are removed
image.storage.aggregate_size = total_size
image.aggregate_size = total_size
if ancestor_size is not None:
total_size = ancestor_size + image_size
image.storage.aggregate_size = total_size
image.aggregate_size = total_size
except Image.DoesNotExist:
pass
else: