Files
zot/pkg/extensions/extension_scrub.go
T
Andrei Aaron da426850e7 chore: update golangci-lint and fix all issues (#3575)
* chore: Update golangci-lint

Signed-off-by: Lars Francke <git@lars-francke.de>

* chore: fix all golangci-lint issues

- Remove deprecated `// +build` tags
- Fix godoclint, modernize, wsl_v5, govet, lll, gci, noctx issues
- Update linter configuration
- Modernize code to use Go 1.22+ features (for range N, slices.Contains, etc.)
- Update make check lint the privileged tests

Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>

---------

Signed-off-by: Lars Francke <git@lars-francke.de>
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>
Co-authored-by: Lars Francke <git@lars-francke.de>
2025-11-22 23:36:48 +02:00

93 lines
2.2 KiB
Go

//go:build scrub
package extensions
import (
"zotregistry.dev/zot/v2/pkg/api/config"
"zotregistry.dev/zot/v2/pkg/extensions/scrub"
"zotregistry.dev/zot/v2/pkg/log"
"zotregistry.dev/zot/v2/pkg/scheduler"
"zotregistry.dev/zot/v2/pkg/storage"
storageTypes "zotregistry.dev/zot/v2/pkg/storage/types"
)
// EnableScrubExtension enables scrub extension.
func EnableScrubExtension(config *config.Config, log log.Logger, storeController storage.StoreController,
sch *scheduler.Scheduler,
) {
// Get extensions config safely
extensionsConfig := config.CopyExtensionsConfig()
if extensionsConfig.IsScrubEnabled() {
scrubInterval := extensionsConfig.GetScrubInterval()
processedRepos := make(map[string]struct{})
generator := &taskGenerator{
imgStore: storeController.DefaultStore,
log: log,
processedRepos: processedRepos,
}
sch.SubmitGenerator(generator, scrubInterval, scheduler.LowPriority)
// Get storage config safely
storageConfig := config.CopyStorageConfig()
if storageConfig.SubPaths != nil {
for route := range storageConfig.SubPaths {
processedRepos := make(map[string]struct{})
generator := &taskGenerator{
imgStore: storeController.SubStore[route],
log: log,
processedRepos: processedRepos,
}
sch.SubmitGenerator(generator, scrubInterval, scheduler.LowPriority)
}
}
} else {
log.Info().Msg("scrub config not provided, skipping scrub")
}
}
type taskGenerator struct {
imgStore storageTypes.ImageStore
log log.Logger
processedRepos map[string]struct{}
done bool
}
func (gen *taskGenerator) Name() string {
return "ScrubGenerator"
}
func (gen *taskGenerator) Next() (scheduler.Task, error) {
repo, err := gen.imgStore.GetNextRepository(gen.processedRepos)
if err != nil {
return nil, err
}
if repo == "" {
gen.done = true
return nil, nil //nolint:nilnil
}
gen.processedRepos[repo] = struct{}{}
return scrub.NewTask(gen.imgStore, repo, gen.log), nil
}
func (gen *taskGenerator) IsDone() bool {
return gen.done
}
func (gen *taskGenerator) IsReady() bool {
return true
}
func (gen *taskGenerator) Reset() {
gen.processedRepos = make(map[string]struct{})
gen.done = false
}