From 34d49e2d44a3eaf707f7964971c0546e9a02ab38 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Wed, 10 Aug 2016 16:15:46 -0400 Subject: [PATCH] Fix duplicate derived storage cache creation issue Fixes #1699 --- data/model/image.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/data/model/image.py b/data/model/image.py index 8128b9f84..c11e7178b 100644 --- a/data/model/image.py +++ b/data/model/image.py @@ -505,8 +505,15 @@ def find_or_create_derived_storage(source_image, transformation_name, preferred_ uniqueness_hash = _get_uniqueness_hash(varying_metadata) trans = ImageStorageTransformation.get(name=transformation_name) new_storage = storage.create_v1_storage(preferred_location) - DerivedStorageForImage.create(source_image=source_image, derivative=new_storage, - transformation=trans, uniqueness_hash=uniqueness_hash) + + try: + DerivedStorageForImage.create(source_image=source_image, derivative=new_storage, + transformation=trans, uniqueness_hash=uniqueness_hash) + except IntegrityError: + # Storage was created while this method executed. Just return the existing. + new_storage.delete_instance(recursive=True) + return find_derived_storage_for_image(source_image, transformation_name, varying_metadata) + return new_storage