diff --git a/data/registry_model/manifestbuilder.py b/data/registry_model/manifestbuilder.py index da2e52760..eac8a2f82 100644 --- a/data/registry_model/manifestbuilder.py +++ b/data/registry_model/manifestbuilder.py @@ -7,7 +7,7 @@ from collections import namedtuple from flask import session from data import model -from data.database import db_transaction, ImageStorage +from data.database import db_transaction, ImageStorage, ImageStoragePlacement from data.registry_model import registry_model from image.docker.schema2 import EMPTY_LAYER_BLOB_DIGEST @@ -203,6 +203,10 @@ class _ManifestBuilder(object): try: storage = ImageStorage.get(id=storage_id) if storage.uploading and storage.content_checksum != EMPTY_LAYER_BLOB_DIGEST: + # Delete all the placements pointing to the storage. + ImageStoragePlacement.delete().where(ImageStoragePlacement.storage == storage).execute() + + # Delete the storage. storage.delete_instance() except ImageStorage.DoesNotExist: pass diff --git a/data/registry_model/test/test_manifestbuilder.py b/data/registry_model/test/test_manifestbuilder.py index 89838f525..ccc986f3d 100644 --- a/data/registry_model/test/test_manifestbuilder.py +++ b/data/registry_model/test/test_manifestbuilder.py @@ -67,6 +67,9 @@ def test_build_manifest(layers, fake_session, registry_model): assert tag assert tag in builder.committed_tags + # Mark the builder as done. + builder.done() + # Verify the legacy image for the tag. found = registry_model.get_repo_tag(repository_ref, 'somenewtag', include_legacy_image=True) assert found