Task #8748
closedStory #7832: [EPIC] As a user, I have Alternate Content Sources
Implement ACS stage in download
100%
Description
Background¶
Assume that an ACS "refresh" has already occurred and that ACS has 3 "paths". At this point the following will have occurred:
- The user had created the remote and ACS
- The 3 hidden repos (one for each path) will have been created
- The refresh will create lots of Content objects associated with each hidden repo and lots of RemoteArtifacts (but no actual artifacts)
Goal¶
Now the user is syncing some other repo. If the ACS had created a Content + Remote Artifact that is present in the repository the user is syncing, the ACS's RemoteArtifact and Remote should be used instead of the Remote the user is providing for the sync.
Implementation¶
Create a new stage that will download Artifacts from ACS sources named ACSArtifactHandler
. This will come just before the ArtifactDownloader
stage so there is an opportunity to modify the data the ArtifactDownloader
stage will use for downloading.
For each not-yet-downloaded Artifact, the ACSArtifactHandler
stage will determine if there is an ACS-created RemoteArtifact
that already exists. If so, it should use that RemoteArtifact for downloading. It should do this by modifying the DeclarativeArtifact so that when the ArtifactDownloader
here calls d_artifact.download()
it will use the ACS downloader.
Optional stage for ACS
if requested by plugin, ACS stage is added and search for content in ACS.
closes: #8748 https://pulp.plan.io/issues/8748