parent
8d05d40cf7
commit
762cd56e64
10 changed files with 155 additions and 112 deletions
|
@ -7,8 +7,8 @@ from data.model import (DataModelException, tag, db_transaction, storage, image,
|
|||
_basequery, config)
|
||||
from data.database import (Repository, Namespace, RepositoryTag, Star, Image, ImageStorage, User,
|
||||
Visibility, RepositoryPermission, TupleSelector, RepositoryActionCount,
|
||||
Role, RepositoryAuthorizedEmail, TagManifest, db_for_update,
|
||||
get_epoch_timestamp, db_random_func)
|
||||
Role, RepositoryAuthorizedEmail, TagManifest, DerivedStorageForImage,
|
||||
db_for_update, get_epoch_timestamp, db_random_func)
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -108,7 +108,7 @@ def garbage_collect_repository(namespace_name, repository_name):
|
|||
def garbage_collect_repo(repo):
|
||||
logger.debug('Garbage collecting repository %s', repo.id)
|
||||
|
||||
storage_id_whitelist = {}
|
||||
storage_id_whitelist = set()
|
||||
tag.garbage_collect_tags(repo)
|
||||
|
||||
with db_transaction():
|
||||
|
@ -142,6 +142,21 @@ def garbage_collect_repo(repo):
|
|||
if len(to_remove) > 0:
|
||||
logger.info('Cleaning up unreferenced images: %s', to_remove)
|
||||
storage_id_whitelist = {images_to_storages[to_remove_id] for to_remove_id in to_remove}
|
||||
|
||||
# Lookup any derived images for the images to remove.
|
||||
derived = DerivedStorageForImage.select().where(
|
||||
DerivedStorageForImage.source_image << to_remove)
|
||||
|
||||
has_derived = False
|
||||
for derived_image in derived:
|
||||
has_derived = True
|
||||
storage_id_whitelist.add(derived_image.derivative_id)
|
||||
|
||||
# Delete any derived images and the images themselves.
|
||||
if has_derived:
|
||||
DerivedStorageForImage.delete().where(
|
||||
DerivedStorageForImage.source_image << to_remove).execute()
|
||||
|
||||
Image.delete().where(Image.id << to_remove).execute()
|
||||
|
||||
if len(to_remove) > 0:
|
||||
|
|
Reference in a new issue