Make sure GC checks new Blob table as well before deleting CAS storage
This commit is contained in:
parent
3d0e63d8e5
commit
bdda74d6df
2 changed files with 60 additions and 7 deletions
|
@ -8,7 +8,7 @@ from data.model import (config, db_transaction, InvalidImageException, TorrentIn
|
|||
DataModelException, _basequery)
|
||||
from data.database import (ImageStorage, Image, ImageStoragePlacement, ImageStorageLocation,
|
||||
ImageStorageTransformation, ImageStorageSignature,
|
||||
ImageStorageSignatureKind, Repository, Namespace, TorrentInfo,
|
||||
ImageStorageSignatureKind, Repository, Namespace, TorrentInfo, Blob,
|
||||
ensure_under_transaction)
|
||||
|
||||
|
||||
|
@ -95,15 +95,24 @@ def garbage_collect_storage(storage_id_whitelist):
|
|||
|
||||
unreferenced_checksums = set()
|
||||
if content_checksums:
|
||||
# Check the current image storage.
|
||||
query = (ImageStorage
|
||||
.select(ImageStorage.content_checksum)
|
||||
.where(ImageStorage.content_checksum << list(content_checksums)))
|
||||
referenced_checksums = set([image_storage.content_checksum for image_storage in query])
|
||||
if referenced_checksums:
|
||||
logger.warning('GC attempted to remove CAS checksums %s, which are still referenced',
|
||||
referenced_checksums)
|
||||
is_referenced_checksums = set([image_storage.content_checksum for image_storage in query])
|
||||
if is_referenced_checksums:
|
||||
logger.warning('GC attempted to remove CAS checksums %s, which are still IS referenced',
|
||||
is_referenced_checksums)
|
||||
|
||||
unreferenced_checksums = content_checksums - referenced_checksums
|
||||
# Check the new Blob table as well.
|
||||
query = Blob.select(Blob.digest).where(Blob.digest << list(content_checksums))
|
||||
blob_referenced_checksums = set([blob.digest for blob in query])
|
||||
if blob_referenced_checksums:
|
||||
logger.warning('GC attempted to remove CAS checksums %s, which are still Blob referenced',
|
||||
blob_referenced_checksums)
|
||||
|
||||
unreferenced_checksums = (content_checksums - blob_referenced_checksums -
|
||||
is_referenced_checksums)
|
||||
|
||||
# Return all placements for all image storages found not at a CAS path or with a content
|
||||
# checksum that is referenced.
|
||||
|
|
Reference in a new issue