Merge pull request #112649 from howardjohn/set/optimize-everything-nothing

Optimize `Everything` and `Nothing` label selectors
This commit is contained in:
Kubernetes Prow Robot 2022-11-02 21:39:57 -07:00 committed by GitHub
commit bbe050dd01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -74,9 +74,12 @@ type Selector interface {
RequiresExactMatch(label string) (value string, found bool) RequiresExactMatch(label string) (value string, found bool)
} }
// Sharing this saves 1 alloc per use; this is safe because it's immutable.
var sharedEverythingSelector Selector = internalSelector{}
// Everything returns a selector that matches all labels. // Everything returns a selector that matches all labels.
func Everything() Selector { func Everything() Selector {
return internalSelector{} return sharedEverythingSelector
} }
type nothingSelector struct{} type nothingSelector struct{}
@ -91,9 +94,12 @@ func (n nothingSelector) RequiresExactMatch(label string) (value string, found b
return "", false return "", false
} }
// Sharing this saves 1 alloc per use; this is safe because it's immutable.
var sharedNothingSelector Selector = nothingSelector{}
// Nothing returns a selector that matches no labels // Nothing returns a selector that matches no labels
func Nothing() Selector { func Nothing() Selector {
return nothingSelector{} return sharedNothingSelector
} }
// NewSelector returns a nil selector // NewSelector returns a nil selector