Move selector filtering after latest release version filtering

Signed-off-by: Dmitry Chepurovskiy <dm3ch@dm3ch.net>
pull/8532/head
Dmitry Chepurovskiy 4 years ago
parent 2ea8f805b9
commit 266c74f390
No known key found for this signature in database
GPG Key ID: A9B6ED8F3D834514

@ -154,22 +154,12 @@ func (l *List) Run() ([]*release.Release, error) {
}
}
selectorObj, err := labels.Parse(l.Selector)
if err != nil {
return nil, err
}
results, err := l.cfg.Releases.List(func(rel *release.Release) bool {
// Skip anything that doesn't match the filter.
if filter != nil && !filter.MatchString(rel.Name) {
return false
}
// Skip anything that doesn't match the selector
if !selectorObj.Matches(labels.Set(rel.Labels)) {
return false
}
return true
})
@ -192,6 +182,13 @@ func (l *List) Run() ([]*release.Release, error) {
// latest releases, otherwise outdated entries can be returned
results = l.filterStateMask(results)
// Skip anything that doesn't match the selector
selectorObj, err := labels.Parse(l.Selector)
if err != nil {
return nil, err
}
results = l.filterSelector(results, selectorObj)
// Unfortunately, we have to sort before truncating, which can incur substantial overhead
l.sort(results)
@ -274,6 +271,18 @@ func (l *List) filterStateMask(releases []*release.Release) []*release.Release {
return desiredStateReleases
}
func (l *List) filterSelector(releases []*release.Release, selector labels.Selector) []*release.Release {
desiredStateReleases := make([]*release.Release, 0)
for _, rls := range releases {
if selector.Matches(labels.Set(rls.Labels)) {
desiredStateReleases = append(desiredStateReleases, rls)
}
}
return desiredStateReleases
}
// SetStateMask calculates the state mask based on parameters.
func (l *List) SetStateMask() {
if l.All {

@ -37,8 +37,9 @@ type Release struct {
Version int `json:"version,omitempty"`
// Namespace is the kubernetes namespace of the release.
Namespace string `json:"namespace,omitempty"`
// Labels of the release
Labels map[string]string `json:"labels,omitempty"`
// Labels of the release.
// Disabled encoding into Json cause labels are stored in storage driver metadata field.
Labels map[string]string `json:"-"`
}
// SetStatus is a helper for setting the status on a release.

Loading…
Cancel
Save