Story #3740

Updated by ttereshc almost 2 years ago

h2. Motivation

In order for the user to be able to "consume modular content": provided by Pulp, while still enabling the Pulp lacks ability administrator to perform copy modular content, including it's dependencies, between repositories, Pulp should provide a dependency solving at a module level and mechanism for the modular content, during the copy operation to copy not only artifacts but dependent modules and their artifacts as well. operation.

Pulp (@2.18) ignores module dependencies when copying modules recursively.
Pulp doesn't distinguish between modular and non-modular artifacts when recursively copying modules to a repository. Pulp however always copies all module artifacts, including the artifacts rpm dependencies.
A potential problem and a rare case:
- a mixture of modular and non-modular packages with the same NEVRA are present in a repo
- unlucky coincidence with versions
- as a result - a "bad" repo (client will likely have a problem with a module which doesn't have all its *modular* rpms in a repo, since some of the copied rpms were non-modular ones).

h2. Proposed solution

It's important for modules to have all their artifacts present in a repo.
No matter of the depsolving strategy for RPMs, *all* module artifacts should be copied to a target repo together with a module. E.g in case the target repository already contains units newer than a module requires, the module-required units need to be copied in the older version, in addition to the already present units.

"Modules may depend on other modules":, either for the build- or the run-time. Pulp should perform dependency solving based on runtime dependencies only. They are already available on Modulemd model.

<<< --- needs review/rewrite
To support these usecases, a fake @libsolv@ solvable can be created for each module unit. This will allow tracking dependencies between the modules. To prevent non-modular content from satisfying dependencies in target repository, it seems exposing the @pool->considered@ bitmap from the @libsolv@ library to its Python binding will be required. This is how DNF deals with solving modular dependencies when installing and upgrading content. This effort is tracked in the sub-task #3741.

h2. References

* the base pulp_modularity support tracker; Issue #3206
* the "Modularity project docs page":
* the depsolving library investigation #3528 "POC":
* "libsolv":
* "modular errata":
* A cross-team, "modular-depsolving document":