mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-26 23:17:34 +00:00
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:
parent
41574813b1
commit
d158bb37c5
8
tools/cache/listers.go
vendored
8
tools/cache/listers.go
vendored
@ -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)
|
||||
}
|
||||
|
20
tools/cache/listers_test.go
vendored
20
tools/cache/listers_test.go
vendored
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user