endpoints: remove obsolete ServiceSelectorCache
Since https://github.com/kubernetes/kubernetes/pull/112648, we can efficiently handle selectors from pre-existing `map[string]string`, making the cache obsolete. Benchmark: ``` name old time/op new time/op delta GetPodServiceMemberships-48 189µs ± 1% 193µs ± 1% +2.10% (p=0.000 n=10+10) name old alloc/op new alloc/op delta GetPodServiceMemberships-48 59.0kB ± 0% 58.9kB ± 0% -0.09% (p=0.000 n=9+9) name old allocs/op new allocs/op delta GetPodServiceMemberships-48 1.02k ± 0% 1.02k ± 0% ~ (all equal) ```
This commit is contained in:
@@ -18,14 +18,12 @@ package endpoint
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
discovery "k8s.io/api/discovery/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/client-go/informers"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
@@ -330,7 +328,7 @@ func genSimpleSvc(namespace, name string) *v1.Service {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceSelectorCache_GetPodServiceMemberships(t *testing.T) {
|
||||
func TestGetPodServiceMemberships(t *testing.T) {
|
||||
fakeInformerFactory := informers.NewSharedInformerFactory(&fake.Clientset{}, 0*time.Second)
|
||||
for i := 0; i < 3; i++ {
|
||||
service := &v1.Service{
|
||||
@@ -361,7 +359,6 @@ func TestServiceSelectorCache_GetPodServiceMemberships(t *testing.T) {
|
||||
pods = append(pods, pod)
|
||||
}
|
||||
|
||||
cache := NewServiceSelectorCache()
|
||||
tests := []struct {
|
||||
name string
|
||||
pod *v1.Pod
|
||||
@@ -395,7 +392,7 @@ func TestServiceSelectorCache_GetPodServiceMemberships(t *testing.T) {
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
services, err := cache.GetPodServiceMemberships(fakeInformerFactory.Core().V1().Services().Lister(), test.pod)
|
||||
services, err := GetPodServiceMemberships(fakeInformerFactory.Core().V1().Services().Lister(), test.pod)
|
||||
if err != nil {
|
||||
t.Errorf("Error from cache.GetPodServiceMemberships: %v", err)
|
||||
} else if !services.Equal(test.expect) {
|
||||
@@ -405,57 +402,6 @@ func TestServiceSelectorCache_GetPodServiceMemberships(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceSelectorCache_Update(t *testing.T) {
|
||||
var selectors []labels.Selector
|
||||
for i := 0; i < 5; i++ {
|
||||
selector := labels.Set(map[string]string{"app": fmt.Sprintf("test-%d", i)}).AsSelectorPreValidated()
|
||||
selectors = append(selectors, selector)
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
key string
|
||||
cache *ServiceSelectorCache
|
||||
update map[string]string
|
||||
expect labels.Selector
|
||||
}{
|
||||
{
|
||||
name: "add test/service-0",
|
||||
key: "test/service-0",
|
||||
cache: generateServiceSelectorCache(map[string]labels.Selector{}),
|
||||
update: map[string]string{"app": "test-0"},
|
||||
expect: selectors[0],
|
||||
},
|
||||
{
|
||||
name: "add test/service-1",
|
||||
key: "test/service-1",
|
||||
cache: generateServiceSelectorCache(map[string]labels.Selector{"test/service-0": selectors[0]}),
|
||||
update: map[string]string{"app": "test-1"},
|
||||
expect: selectors[1],
|
||||
},
|
||||
{
|
||||
name: "update test/service-2",
|
||||
key: "test/service-2",
|
||||
cache: generateServiceSelectorCache(map[string]labels.Selector{"test/service-2": selectors[2]}),
|
||||
update: map[string]string{"app": "test-0"},
|
||||
expect: selectors[0],
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
selector := test.cache.Update(test.key, test.update)
|
||||
if !reflect.DeepEqual(selector, test.expect) {
|
||||
t.Errorf("Expect selector %v , but got %v", test.expect, selector)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func generateServiceSelectorCache(cache map[string]labels.Selector) *ServiceSelectorCache {
|
||||
return &ServiceSelectorCache{
|
||||
cache: cache,
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkGetPodServiceMemberships(b *testing.B) {
|
||||
// init fake service informer.
|
||||
fakeInformerFactory := informers.NewSharedInformerFactory(&fake.Clientset{}, 0*time.Second)
|
||||
@@ -484,11 +430,10 @@ func BenchmarkGetPodServiceMemberships(b *testing.B) {
|
||||
},
|
||||
}
|
||||
|
||||
cache := NewServiceSelectorCache()
|
||||
expect := sets.NewString("test/service-0")
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
services, err := cache.GetPodServiceMemberships(fakeInformerFactory.Core().V1().Services().Lister(), pod)
|
||||
services, err := GetPodServiceMemberships(fakeInformerFactory.Core().V1().Services().Lister(), pod)
|
||||
if err != nil {
|
||||
b.Fatalf("Error from GetPodServiceMemberships(): %v", err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user