From 3c526c957a3349a432fc1ca2e29da31d2e602a18 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 15 Feb 2019 21:17:33 -0500 Subject: [PATCH] Catch exceptions if trying to build an invalid manifest in the manifest backfill code --- data/registry_model/shared.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/data/registry_model/shared.py b/data/registry_model/shared.py index ae0155f63..586adcd96 100644 --- a/data/registry_model/shared.py +++ b/data/registry_model/shared.py @@ -434,12 +434,24 @@ class SharedModel: # Add the leaf layer builder.add_layer(legacy_image_row.storage.content_checksum, legacy_image_row.v1_json_metadata) + if legacy_image_row.storage.uploading: + logger.error('Cannot add an uploading storage row: %s', legacy_image_row.storage.id) + return None for parent_image in parents: + if parent_image.storage.uploading: + logger.error('Cannot add an uploading storage row: %s', legacy_image_row.storage.id) + return None + builder.add_layer(parent_image.storage.content_checksum, parent_image.v1_json_metadata) # Sign the manifest with our signing key. - return builder.build(docker_v2_signing_key) + try: + return builder.build(docker_v2_signing_key) + except ManifestException as me: + logger.exception('Got exception when trying to build manifest for legacy image %s', + legacy_image_row) + return None def _get_shared_storage(self, blob_digest): """ Returns an ImageStorage row for the blob digest if it is a globally shared storage. """