Properly delete excluded rpms after a catalog change

This commit is contained in:
Mustafa Gezen 2022-11-23 18:01:04 +01:00
parent c6bec99698
commit 9592fc297c
Signed by untrusted user who does not match committer: mustafa
GPG Key ID: DCDF010D946438C1

View File

@ -84,6 +84,7 @@ type UpdateRepoRequest struct {
DisableSigning bool `json:"disableSigning"` DisableSigning bool `json:"disableSigning"`
DisableSetActive bool `json:"disableSetActive"` DisableSetActive bool `json:"disableSetActive"`
NoDeletePrevious bool `json:"noDeletePrevious"` NoDeletePrevious bool `json:"noDeletePrevious"`
NoDeleteInChain bool `json:"noDeleteInChain"`
} }
type CompiledGlobFilter struct { type CompiledGlobFilter struct {
@ -106,6 +107,7 @@ type CachedRepo struct {
type Cache struct { type Cache struct {
GlobFilters map[string]*CompiledGlobFilter GlobFilters map[string]*CompiledGlobFilter
Repos map[string]*CachedRepo Repos map[string]*CachedRepo
NoDeleteChain []string
} }
// Chain multiple errors and stop processing if any error is returned // Chain multiple errors and stop processing if any error is returned
@ -1011,7 +1013,7 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
} }
// Get artifacts to skip deletion // Get artifacts to skip deletion
if !req.Delete { if !req.Delete && moduleStream == nil {
for _, artifact := range artifacts { for _, artifact := range artifacts {
skipDeleteArtifacts = append(skipDeleteArtifacts, strings.TrimSuffix(filepath.Base(artifact.Name), ".rpm")) skipDeleteArtifacts = append(skipDeleteArtifacts, strings.TrimSuffix(filepath.Base(artifact.Name), ".rpm"))
} }
@ -1054,10 +1056,6 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
var compiledExcludeGlobs []*CompiledGlobFilter var compiledExcludeGlobs []*CompiledGlobFilter
for _, excludeGlob := range repo.ExcludeFilter { for _, excludeGlob := range repo.ExcludeFilter {
if cache.GlobFilters[excludeGlob] != nil {
compiledExcludeGlobs = append(compiledExcludeGlobs, cache.GlobFilters[excludeGlob])
continue
}
var arch string var arch string
var globVal string var globVal string
if globFilterArchRegex.MatchString(excludeGlob) { if globFilterArchRegex.MatchString(excludeGlob) {
@ -1076,7 +1074,6 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
Glob: g, Glob: g,
} }
compiledExcludeGlobs = append(compiledExcludeGlobs, globFilter) compiledExcludeGlobs = append(compiledExcludeGlobs, globFilter)
cache.GlobFilters[excludeGlob] = globFilter
} }
for arch, archArtifacts := range artifactArchMap { for arch, archArtifacts := range artifactArchMap {
@ -1321,7 +1318,7 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
// Check if it matches any exclude filter // Check if it matches any exclude filter
for _, excludeFilter := range compiledExcludeGlobs { for _, excludeFilter := range compiledExcludeGlobs {
if excludeFilter.Arch != "" && excludeFilter.Arch != strings.TrimSuffix(arch, "-debug") { if excludeFilter.Arch != "" && excludeFilter.Arch != noDebugArch {
continue continue
} }
if excludeFilter.Glob.Match(noDebugInfoName) || excludeFilter.Glob.Match(archName) { if excludeFilter.Glob.Match(noDebugInfoName) || excludeFilter.Glob.Match(archName) {
@ -1333,11 +1330,6 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
baseNoRpm := strings.Replace(filepath.Base(artifact.Name), ".rpm", "", 1) baseNoRpm := strings.Replace(filepath.Base(artifact.Name), ".rpm", "", 1)
if !shouldAdd {
changes.RemovedPackages = append(changes.RemovedPackages, baseNoRpm)
continue
}
var anyMetadata anypb.Any var anyMetadata anypb.Any
err := protojson.Unmarshal(artifact.Metadata.JSONText, &anyMetadata) err := protojson.Unmarshal(artifact.Metadata.JSONText, &anyMetadata)
if err != nil { if err != nil {
@ -1436,6 +1428,14 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
} }
} }
} }
if !shouldAdd {
if primaryIndex != nil {
changes.RemovedPackages = append(changes.RemovedPackages, baseNoRpm)
}
continue
}
if primaryIndex != nil { if primaryIndex != nil {
c.log.Infof("found primary index %d", *primaryIndex) c.log.Infof("found primary index %d", *primaryIndex)
if !utils.StrContains(baseNoRpm, changes.ModifiedPackages) && !utils.StrContains(baseNoRpm, changes.AddedPackages) { if !utils.StrContains(baseNoRpm, changes.ModifiedPackages) && !utils.StrContains(baseNoRpm, changes.AddedPackages) {
@ -1449,6 +1449,7 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
} }
primaryRoot.Packages = append(primaryRoot.Packages, pkgPrimary.Packages[0]) primaryRoot.Packages = append(primaryRoot.Packages, pkgPrimary.Packages[0])
} }
cache.NoDeleteChain = append(cache.NoDeleteChain, baseNoRpm)
var filelistsIndex *int var filelistsIndex *int
if pkgId != nil { if pkgId != nil {
@ -1500,9 +1501,18 @@ func (c *Controller) makeRepoChanges(tx peridotdb.Access, req *UpdateRepoRequest
noRpmName := strings.TrimSuffix(filepath.Base(artifact.Name), ".rpm") noRpmName := strings.TrimSuffix(filepath.Base(artifact.Name), ".rpm")
if filepath.Base(artifact.Name) == filepath.Base(pkg.Location.Href) && !utils.StrContains(noRpmName, changes.ModifiedPackages) && !utils.StrContains(noRpmName, changes.AddedPackages) && !utils.StrContains(noRpmName, skipDeleteArtifacts) { if filepath.Base(artifact.Name) == filepath.Base(pkg.Location.Href) && !utils.StrContains(noRpmName, changes.ModifiedPackages) && !utils.StrContains(noRpmName, changes.AddedPackages) && !utils.StrContains(noRpmName, skipDeleteArtifacts) {
shouldAdd = false shouldAdd = false
if req.NoDeleteInChain {
if utils.StrContains(noRpmName, cache.NoDeleteChain) {
shouldAdd = true
} }
} }
} }
}
}
noRpmNamePkg := strings.TrimSuffix(filepath.Base(pkg.Location.Href), ".rpm")
if utils.StrContains(noRpmNamePkg, changes.RemovedPackages) {
shouldAdd = false
}
if !shouldAdd { if !shouldAdd {
c.log.Infof("deleting %s", pkg.Location.Href) c.log.Infof("deleting %s", pkg.Location.Href)
deleteIds = append(deleteIds, pkg.Checksum.Value) deleteIds = append(deleteIds, pkg.Checksum.Value)