From 8591caf0372dc0f68eb146a5e28a06eedd3fea87 Mon Sep 17 00:00:00 2001 From: Kenny Lee Sin Cheong <2530351+kleesc@users.noreply.github.com> Date: Wed, 12 May 2021 10:59:57 -0400 Subject: [PATCH] db: remove transaction from empty layer upload (PROJQUAY-1946) (#775) Decouples blob upload and db row creation when uploading the empty layer. This avoids the transaction blocking on non-db/S3 related issues. --- data/model/blob.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/data/model/blob.py b/data/model/blob.py index c92e9c2bc..b82f62f18 100644 --- a/data/model/blob.py +++ b/data/model/blob.py @@ -239,13 +239,14 @@ def get_or_create_shared_blob(digest, byte_data, storage): preferred = storage.preferred_locations[0] location_obj = ImageStorageLocation.get(name=preferred) - with db_transaction(): - record = ImageStorage.create(image_size=len(byte_data), content_checksum=digest) - try: - storage.put_content([preferred], storage_model.get_layer_path(record), byte_data) - ImageStoragePlacement.create(storage=record, location=location_obj) - except: - logger.exception("Exception when trying to write special layer %s", digest) - raise + record = ImageStorage.create(image_size=len(byte_data), content_checksum=digest) - return record + try: + storage.put_content([preferred], storage_model.get_layer_path(record), byte_data) + ImageStoragePlacement.create(storage=record, location=location_obj) + except: + logger.exception("Exception when trying to write special layer %s", digest) + record.delete_instance() + raise + + return record