Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES/+collection_delete_memory.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Reduced memory usage when deleting collections with many versions.
7 changes: 6 additions & 1 deletion pulp_ansible/app/galaxy/v3/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@

from pulp_ansible.app.tasks.deletion import delete_collection_version, delete_collection

from pulp_ansible.app.utils import filter_content_for_repo_version
from pulp_ansible.app.utils import filter_content_for_repo_version, set_collection_deferred_fields

DOMAIN_ENABLED = settings.DOMAIN_ENABLED

Expand Down Expand Up @@ -446,6 +446,11 @@ def destroy(self, request: Request, *args, **kwargs) -> Response:
status=status.HTTP_400_BAD_REQUEST,
)

# Defer loading large JSON fields to prevent memory exhaustion
set_collection_deferred_fields(
["contents", "docs_blob", "manifest", "files", "dependencies"]
)

repositories = set()
for version in collection.versions.all():
for repo in version.repositories.all():
Expand Down
4 changes: 4 additions & 0 deletions pulp_ansible/app/tasks/deletion.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from collections import defaultdict

from pulp_ansible.app.models import Collection, CollectionVersion
from pulp_ansible.app.utils import set_collection_deferred_fields
from pulpcore.plugin.tasking import add_and_remove, orphan_cleanup

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -71,6 +72,9 @@ def delete_collection(collection_pk):
2. Run orphan_cleanup to delete the CollectionVersions
3. Delete Collection
"""
# Defer loading large JSON fields to prevent memory exhaustion
set_collection_deferred_fields(["contents", "docs_blob", "manifest", "files", "dependencies"])

collection = Collection.objects.get(pk=collection_pk)
versions = collection.versions.all()
_remove_collection_version_from_repos(versions)
Expand Down
Loading