mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
Merge pull request #102188 from alculquicondor/fasterselector
Improve slice allocation in LabelSelectorAsSelector
This commit is contained in:
commit
785d9f028a
@ -38,13 +38,13 @@ func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) {
|
|||||||
if len(ps.MatchLabels)+len(ps.MatchExpressions) == 0 {
|
if len(ps.MatchLabels)+len(ps.MatchExpressions) == 0 {
|
||||||
return labels.Everything(), nil
|
return labels.Everything(), nil
|
||||||
}
|
}
|
||||||
selector := labels.NewSelector()
|
requirements := make([]labels.Requirement, 0, len(ps.MatchLabels)+len(ps.MatchExpressions))
|
||||||
for k, v := range ps.MatchLabels {
|
for k, v := range ps.MatchLabels {
|
||||||
r, err := labels.NewRequirement(k, selection.Equals, []string{v})
|
r, err := labels.NewRequirement(k, selection.Equals, []string{v})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
selector = selector.Add(*r)
|
requirements = append(requirements, *r)
|
||||||
}
|
}
|
||||||
for _, expr := range ps.MatchExpressions {
|
for _, expr := range ps.MatchExpressions {
|
||||||
var op selection.Operator
|
var op selection.Operator
|
||||||
@ -64,8 +64,10 @@ func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
selector = selector.Add(*r)
|
requirements = append(requirements, *r)
|
||||||
}
|
}
|
||||||
|
selector := labels.NewSelector()
|
||||||
|
selector = selector.Add(requirements...)
|
||||||
return selector, nil
|
return selector, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +156,7 @@ func SetAsLabelSelector(ls labels.Set) *LabelSelector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selector := &LabelSelector{
|
selector := &LabelSelector{
|
||||||
MatchLabels: make(map[string]string),
|
MatchLabels: make(map[string]string, len(ls)),
|
||||||
}
|
}
|
||||||
for label, value := range ls {
|
for label, value := range ls {
|
||||||
selector.MatchLabels[label] = value
|
selector.MatchLabels[label] = value
|
||||||
|
@ -93,6 +93,26 @@ func TestLabelSelectorAsSelector(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkLabelSelectorAsSelector(b *testing.B) {
|
||||||
|
selector := &LabelSelector{
|
||||||
|
MatchLabels: map[string]string{
|
||||||
|
"foo": "foo",
|
||||||
|
"bar": "bar",
|
||||||
|
},
|
||||||
|
MatchExpressions: []LabelSelectorRequirement{{
|
||||||
|
Key: "baz",
|
||||||
|
Operator: LabelSelectorOpExists,
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
b.StartTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
_, err := LabelSelectorAsSelector(selector)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestLabelSelectorAsMap(t *testing.T) {
|
func TestLabelSelectorAsMap(t *testing.T) {
|
||||||
matchLabels := map[string]string{"foo": "bar"}
|
matchLabels := map[string]string{"foo": "bar"}
|
||||||
matchExpressions := func(operator LabelSelectorOperator, values []string) []LabelSelectorRequirement {
|
matchExpressions := func(operator LabelSelectorOperator, values []string) []LabelSelectorRequirement {
|
||||||
|
@ -367,13 +367,9 @@ func safeSort(in []string) []string {
|
|||||||
|
|
||||||
// Add adds requirements to the selector. It copies the current selector returning a new one
|
// Add adds requirements to the selector. It copies the current selector returning a new one
|
||||||
func (s internalSelector) Add(reqs ...Requirement) Selector {
|
func (s internalSelector) Add(reqs ...Requirement) Selector {
|
||||||
var ret internalSelector
|
ret := make(internalSelector, 0, len(s)+len(reqs))
|
||||||
for ix := range s {
|
ret = append(ret, s...)
|
||||||
ret = append(ret, s[ix])
|
ret = append(ret, reqs...)
|
||||||
}
|
|
||||||
for _, r := range reqs {
|
|
||||||
ret = append(ret, r)
|
|
||||||
}
|
|
||||||
sort.Sort(ByKey(ret))
|
sort.Sort(ByKey(ret))
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user