Actions
Test #4464
closedContent delivery breaks if remote is deleted
Version:
Platform Release:
Tags:
Sprint:
Quarter:
Description
Problem¶
It is possible to delete a Remote which is referenced by RemoteArtifacts that are part of a Publication/Repo. As cascading delete is used (https://github.com/pulp/pulp/blob/88a6ebf31de83a4877909fa93fd94bf122894838/pulpcore/app/models/content.py#L335), this will delete the RemoteArtifacts as well.
If such an artifact is retrieved via the content app and needs to be streamed, this will fail with an internal server error:
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: Traceback (most recent call last):
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/aiohttp/web_protocol.py", line 390, in start
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: resp = await self._request_handler(request)
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/aiohttp/web_app.py", line 366, in _handle
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: resp = await handler(request)
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/devel/pulp/pulpcore/content/handler.py", line 65, in stream_content
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: return await self._match_and_stream(path, request)
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/devel/pulp/pulpcore/content/handler.py", line 179, in _match_and_stream
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: return await self._stream_content_artifact(request, web.StreamResponse(), ca)
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/devel/pulp/pulpcore/content/handler.py", line 223, in _stream_content_artifact
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: remote_artifact = content_artifact.remoteartifact_set.get()
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: return getattr(self.get_queryset(), name)(*args, **kwargs)
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: File "/home/vagrant/.virtualenvs/pulp/lib64/python3.6/site-packages/django/db/models/query.py", line 399, in get
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: self.model._meta.object_name
Dec 30 17:41:45 pulp3.dev gunicorn[23755]: pulpcore.app.models.content.RemoteArtifact.DoesNotExist: RemoteArtifact matching query does not exist.
Possible solutions:¶
1. Block the deletion of the remote as long as referencing RemoteArtifacts exist
2. Return a 404 not found error
Related issues
Updated by bherring over 5 years ago
- Copied from Issue #4289: Content delivery breaks if remote is deleted added
Added by kersom over 5 years ago
Updated by kersom over 5 years ago
- Status changed from ASSIGNED to MODIFIED
Applied in changeset pulpcore|73b9788fd0dacf3245a4ed08a2d75dc0d597e12a.
Updated by kersom over 5 years ago
- Status changed from MODIFIED to CLOSED - COMPLETE
Actions
Add test to content delivery breaks if remote is deleted
Add test to verify that content delivery breaks if a remote - using lazy download policy, is deleted. Also verify that the content can be downloaded from Pulp once the remote is recreated and another sync is triggered.
https://pulp.plan.io/issues/4464 #4464