worker: extend the depsolve job to use DepsolvePackageSets()

Extend the `DepsolveJob` worker job argument to contain package sets
chains and use `DepsolvePackageSets()` for depsolving.
This commit is contained in:
Tomas Hozza 2022-04-25 10:09:35 +02:00 committed by Ondřej Budai
parent ac8b0b211c
commit e819e08098
3 changed files with 29 additions and 28 deletions

View file

@ -18,23 +18,22 @@ type DepsolveJobImpl struct {
// in repos are used for all package sets, whereas the repositories in // in repos are used for all package sets, whereas the repositories in
// packageSetsRepos are only used for the package set with the same name // packageSetsRepos are only used for the package set with the same name
// (matching map keys). // (matching map keys).
func (impl *DepsolveJobImpl) depsolve(packageSets map[string]rpmmd.PackageSet, repos []rpmmd.RepoConfig, packageSetsRepos map[string][]rpmmd.RepoConfig, modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) { func (impl *DepsolveJobImpl) depsolve(packageSetsChains map[string][]string,
packageSets map[string]rpmmd.PackageSet,
repos []rpmmd.RepoConfig,
packageSetsRepos map[string][]rpmmd.RepoConfig,
modulePlatformID, arch, releasever string) (map[string][]rpmmd.PackageSpec, error) {
rpmMD := rpmmd.NewRPMMD(impl.RPMMDCache) rpmMD := rpmmd.NewRPMMD(impl.RPMMDCache)
packageSpecs := make(map[string][]rpmmd.PackageSpec) return rpmMD.DepsolvePackageSets(
for name, packageSet := range packageSets { packageSetsChains,
repositories := make([]rpmmd.RepoConfig, len(repos)) packageSets,
copy(repositories, repos) repos,
if packageSetRepositories, ok := packageSetsRepos[name]; ok { packageSetsRepos,
repositories = append(repositories, packageSetRepositories...) modulePlatformID,
} arch,
packageSpec, _, err := rpmMD.Depsolve(packageSet, repositories, modulePlatformID, arch, releasever) releasever,
if err != nil { )
return nil, err
}
packageSpecs[name] = packageSpec
}
return packageSpecs, nil
} }
func (impl *DepsolveJobImpl) Run(job worker.Job) error { func (impl *DepsolveJobImpl) Run(job worker.Job) error {
@ -46,7 +45,7 @@ func (impl *DepsolveJobImpl) Run(job worker.Job) error {
} }
var result worker.DepsolveJobResult var result worker.DepsolveJobResult
result.PackageSpecs, err = impl.depsolve(args.PackageSets, args.Repos, args.PackageSetsRepos, args.ModulePlatformID, args.Arch, args.Releasever) result.PackageSpecs, err = impl.depsolve(args.PackageSetsChains, args.PackageSets, args.Repos, args.PackageSetsRepos, args.ModulePlatformID, args.Arch, args.Releasever)
if err != nil { if err != nil {
switch e := err.(type) { switch e := err.(type) {
case *rpmmd.DNFError: case *rpmmd.DNFError:

View file

@ -84,12 +84,13 @@ func (s *Server) enqueueCompose(distribution distro.Distro, bp blueprint.Bluepri
ir := irs[0] ir := irs[0]
depsolveJobID, err := s.workers.EnqueueDepsolve(&worker.DepsolveJob{ depsolveJobID, err := s.workers.EnqueueDepsolve(&worker.DepsolveJob{
PackageSets: ir.imageType.PackageSets(bp), PackageSetsChains: ir.imageType.PackageSetsChains(),
Repos: ir.repositories, PackageSets: ir.imageType.PackageSets(bp),
ModulePlatformID: distribution.ModulePlatformID(), Repos: ir.repositories,
Arch: ir.arch.Name(), ModulePlatformID: distribution.ModulePlatformID(),
Releasever: distribution.Releasever(), Arch: ir.arch.Name(),
PackageSetsRepos: ir.packageSetsRepositories, Releasever: distribution.Releasever(),
PackageSetsRepos: ir.packageSetsRepositories,
}, channel) }, channel)
if err != nil { if err != nil {
return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err) return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err)

View file

@ -108,12 +108,13 @@ func (pn *PipelineNames) All() []string {
// PackageSetsRepos are only used by the package sets that share the same name // PackageSetsRepos are only used by the package sets that share the same name
// (map key). // (map key).
type DepsolveJob struct { type DepsolveJob struct {
PackageSets map[string]rpmmd.PackageSet `json:"package_sets"` PackageSetsChains map[string][]string `json:"package_sets_chains"`
Repos []rpmmd.RepoConfig `json:"repos"` PackageSets map[string]rpmmd.PackageSet `json:"package_sets"`
ModulePlatformID string `json:"module_platform_id"` Repos []rpmmd.RepoConfig `json:"repos"`
Arch string `json:"arch"` ModulePlatformID string `json:"module_platform_id"`
Releasever string `json:"releasever"` Arch string `json:"arch"`
PackageSetsRepos map[string][]rpmmd.RepoConfig `json:"package_sets_repositories,omitempty"` Releasever string `json:"releasever"`
PackageSetsRepos map[string][]rpmmd.RepoConfig `json:"package_sets_repositories,omitempty"`
} }
type ErrorType string type ErrorType string