Project

Profile

Help

Issue #4289

Story #3693: Lazy for Pulp3

Content delivery breaks if remote is deleted

Added by gmbnomis 11 months ago. Updated 7 months ago.

Status:
MODIFIED
Priority:
Normal
Assignee:
Category:
-
Sprint/Milestone:
Start date:
Due date:
Severity:
2. Medium
Version:
Platform Release:
Blocks Release:
OS:
Backwards Incompatible:
No
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
QA Contact:
Complexity:
Smash Test:
Verified:
No
Verification Required:
No
Sprint:
Sprint 48

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

Copied to Pulp - Test #4464: Content delivery breaks if remote is deleted CLOSED - COMPLETE Actions

History

#1 Updated by jortel@redhat.com 11 months ago

The cascading delete is the correct behavior. The streamer just needs to 404 when no matching RemoteArtifact records are found. Probably should log at DEBUG that it could not find any RemoteArtifact for the URL for troubleshooting.

#2 Updated by CodeHeeler 11 months ago

  • Tags Pulp 3 RC Blocker added

#3 Updated by CodeHeeler 11 months ago

  • Triaged changed from No to Yes
  • Sprint set to Sprint 47

#4 Updated by bmbouter 11 months ago

I believe cascade deleting the RemoteArtifacts when the Remote is deleted makes sense because there is effectively no Remote to fetch it so all it can do is fail.

It should fail gracefully so +1 to option 2. It should raise an aiohttp.web_exceptions.HttpNotFound exception in the case where the ContentArtifact exists, but has no Artifact and no RemoteArtifact. Is this right?

#5 Updated by rchan 10 months ago

  • Sprint changed from Sprint 47 to Sprint 48

#6 Updated by bmbouter 10 months ago

  • Parent task set to #3693

#7 Updated by bmbouter 10 months ago

  • Status changed from NEW to ASSIGNED
  • Assignee set to bmbouter

#8 Updated by bmbouter 10 months ago

  • Status changed from ASSIGNED to MODIFIED

This was resolved accidentally by another PR. Specifically this change here: https://github.com/pulp/pulp/pull/3826/files#diff-8d791f887df7f2776bf3a0396432c40bR270

#9 Updated by bherring 9 months ago

  • Copied to Test #4464: Content delivery breaks if remote is deleted added

#10 Updated by daviddavis 7 months ago

  • Sprint/Milestone set to 3.0

#11 Updated by bmbouter 7 months ago

  • Tags deleted (Pulp 3, Pulp 3 RC Blocker)

Please register to edit this issue

Also available in: Atom PDF