mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-24 06:28:13 +01:00
Worker pool can be full while retrieving tags
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.2 (2019/07/01)
|
||||
|
||||
* Worker pool can be full while retrieving tags
|
||||
|
||||
## 1.0.1 (2019/07/01)
|
||||
|
||||
* Fix runtime error
|
||||
|
||||
@@ -94,10 +94,6 @@ func (di *Diun) Run() {
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Job image error")
|
||||
}
|
||||
err = di.imageRepoJob(t)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("Job image repo error")
|
||||
}
|
||||
}
|
||||
di.wg.Done()
|
||||
})
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
)
|
||||
|
||||
type imageJob struct {
|
||||
origin bool
|
||||
image model.Image
|
||||
registry *docker.RegistryClient
|
||||
}
|
||||
@@ -33,15 +32,55 @@ func (di *Diun) procImages() {
|
||||
continue
|
||||
}
|
||||
|
||||
image, err := registry.ParseImage(img.Name)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("image", img.Name).Msg("Cannot parse image")
|
||||
continue
|
||||
}
|
||||
|
||||
di.wg.Add(1)
|
||||
err = di.pool.Invoke(imageJob{
|
||||
origin: true,
|
||||
image: img,
|
||||
registry: reg,
|
||||
})
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msgf("Invoking image job")
|
||||
}
|
||||
|
||||
if !img.WatchRepo || image.Domain == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
tags, err := reg.Tags(docker.TagsOptions{
|
||||
Image: image,
|
||||
Max: img.MaxTags,
|
||||
Include: img.IncludeTags,
|
||||
Exclude: img.ExcludeTags,
|
||||
})
|
||||
if err != nil {
|
||||
log.Error().Err(err).Str("image", image.String()).Msg("Cannot retrieve tags")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Debug().Str("image", image.String()).Msgf("%d tag(s) found in repository. %d will be analyzed (%d max, %d not included, %d excluded).",
|
||||
tags.Total,
|
||||
len(tags.List),
|
||||
img.MaxTags,
|
||||
tags.NotIncluded,
|
||||
tags.Excluded,
|
||||
)
|
||||
|
||||
for _, tag := range tags.List {
|
||||
img.Name = fmt.Sprintf("%s/%s:%s", image.Domain, image.Path, tag)
|
||||
di.wg.Add(1)
|
||||
err = di.pool.Invoke(imageJob{
|
||||
image: img,
|
||||
registry: reg,
|
||||
})
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msgf("Invoking image job (tag)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,44 +135,3 @@ func (di *Diun) imageJob(job imageJob) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (di *Diun) imageRepoJob(job imageJob) error {
|
||||
image, err := registry.ParseImage(job.image.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !job.origin || image.Domain == "" || !job.image.WatchRepo {
|
||||
return nil
|
||||
}
|
||||
|
||||
tags, err := job.registry.Tags(docker.TagsOptions{
|
||||
Image: image,
|
||||
Max: job.image.MaxTags,
|
||||
Include: job.image.IncludeTags,
|
||||
Exclude: job.image.ExcludeTags,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Debug().Str("image", image.String()).Msgf("%d tag(s) found in repository. %d will be analyzed (%d max, %d not included, %d excluded).",
|
||||
tags.Total,
|
||||
len(tags.List),
|
||||
job.image.MaxTags,
|
||||
tags.NotIncluded,
|
||||
tags.Excluded,
|
||||
)
|
||||
|
||||
job.origin = false
|
||||
for _, tag := range tags.List {
|
||||
job.image.Name = fmt.Sprintf("%s/%s:%s", image.Domain, image.Path, tag)
|
||||
di.wg.Add(1)
|
||||
err = di.pool.Invoke(job)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msgf("Invoking repo image job")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user