diff --git a/data/oci_model/blob.py b/data/oci_model/blob.py index dbcea422b..7cc5a65d7 100644 --- a/data/oci_model/blob.py +++ b/data/oci_model/blob.py @@ -1,8 +1,11 @@ +import logging + from peewee import IntegrityError from data.model import db_transaction from data.database import Blob, BlobPlacementLocation, BlobPlacement +logger = logging.getLogger(__name__) def _ensure_sha256_header(digest): if digest.startswith('sha256:'): @@ -17,21 +20,27 @@ def get_blob(digest): def get_or_create_blob(digest, size, media_type_name, locations): """ Try to find a blob by its digest or create it. """ - with db_transaction(): - try: - blob = get_blob(digest) - except Blob.DoesNotExist: - blob = Blob.create(digest=_ensure_sha256_header(digest), - media_type_id=Blob.media_type.get_id(media_type_name), - size=size) - for location_name in locations: - location_id = BlobPlacement.location.get_id(location_name) - try: - BlobPlacement.create(blob=blob, location=location_id) - except IntegrityError: - pass - return blob + # Get or create the blog entry for the digest. + try: + blob = get_blob(digest) + logger.debug('Retrieved blob with digest %s', digest) + except Blob.DoesNotExist: + blob = Blob.create(digest=_ensure_sha256_header(digest), + media_type_id=Blob.media_type.get_id(media_type_name), + size=size) + logger.debug('Created blob with digest %s', digest) + + # Add the locations to the blob. + for location_name in locations: + location_id = BlobPlacement.location.get_id(location_name) + try: + BlobPlacement.create(blob=blob, location=location_id) + except IntegrityError: + logger.debug('Location %s already existing for blob %s', location_name, blob.id) + pass + + return blob def get_blob_locations(digest):