feat: optimize ListAll and ListAllByNamespace to return directly when nothing to select

Signed-off-by: likakuli <1154584512@qq.com>

Kubernetes-commit: 5a7e04b6cc70bd7624536e09b4e977e8f25cb476
This commit is contained in:
likakuli 2025-06-12 17:33:32 +08:00 committed by Kubernetes Publisher
parent 41574813b1
commit d158bb37c5
2 changed files with 28 additions and 0 deletions

View File

@ -32,6 +32,10 @@ type AppendFunc func(interface{})
// ListAll lists items in the store matching the given selector, calling appendFn on each one.
func ListAll(store Store, selector labels.Selector, appendFn AppendFunc) error {
if labels.MatchesNothing(selector) {
return nil
}
selectAll := selector.Empty()
for _, m := range store.List() {
if selectAll {
@ -55,6 +59,10 @@ func ListAll(store Store, selector labels.Selector, appendFn AppendFunc) error {
// calling appendFn on each one.
// If a blank namespace (NamespaceAll) is specified, this delegates to ListAll().
func ListAllByNamespace(indexer Indexer, namespace string, selector labels.Selector, appendFn AppendFunc) error {
if labels.MatchesNothing(selector) {
return nil
}
if namespace == metav1.NamespaceAll {
return ListAll(indexer, selector, appendFn)
}

View File

@ -138,3 +138,23 @@ func BenchmarkLister_Match_100k_100(b *testing.B) {
func BenchmarkLister_Match_1M_100(b *testing.B) {
benchmarkLister(b, 1000000, 100, map[string]string{"match": "true"})
}
func benchmarkNothingLister(b *testing.B, numObjects int, numMatching int, labelSelector *metav1.LabelSelector) {
store := mustCreateStore(numObjects, numMatching, nil)
selector, err := metav1.LabelSelectorAsSelector(labelSelector)
if err != nil {
b.Fatalf("LabelSelectorAsSelector returned an error: %v", err)
}
b.ResetTimer()
for n := 0; n < b.N; n++ {
err := ListAll(store, selector, func(m interface{}) {
})
if err != nil {
b.Fatalf("ListAll returned an error: %v", err)
}
}
}
func BenchmarkLister_Match_1M_0(b *testing.B) {
benchmarkNothingLister(b, 1000000, 0, nil)
}