mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Merge pull request #15230 from GiedriusS/optimize_resolvepodref
discovery/kubernetes: optimize resolvePodRef
This commit is contained in:
commit
99c0e68013
|
@ -102,10 +102,7 @@ func NewEndpoints(l *slog.Logger, eps cache.SharedIndexInformer, svc, pod, node
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ep := &apiv1.Endpoints{}
|
obj, exists, err := e.endpointsStore.GetByKey(namespacedName(svc.Namespace, svc.Name))
|
||||||
ep.Namespace = svc.Namespace
|
|
||||||
ep.Name = svc.Name
|
|
||||||
obj, exists, err := e.endpointsStore.Get(ep)
|
|
||||||
if exists && err == nil {
|
if exists && err == nil {
|
||||||
e.enqueue(obj.(*apiv1.Endpoints))
|
e.enqueue(obj.(*apiv1.Endpoints))
|
||||||
}
|
}
|
||||||
|
@ -457,11 +454,8 @@ func (e *Endpoints) resolvePodRef(ref *apiv1.ObjectReference) *apiv1.Pod {
|
||||||
if ref == nil || ref.Kind != "Pod" {
|
if ref == nil || ref.Kind != "Pod" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
p := &apiv1.Pod{}
|
|
||||||
p.Namespace = ref.Namespace
|
|
||||||
p.Name = ref.Name
|
|
||||||
|
|
||||||
obj, exists, err := e.podStore.Get(p)
|
obj, exists, err := e.podStore.GetByKey(namespacedName(ref.Namespace, ref.Name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logger.Error("resolving pod ref failed", "err", err)
|
e.logger.Error("resolving pod ref failed", "err", err)
|
||||||
return nil
|
return nil
|
||||||
|
@ -473,11 +467,7 @@ func (e *Endpoints) resolvePodRef(ref *apiv1.ObjectReference) *apiv1.Pod {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Endpoints) addServiceLabels(ns, name string, tg *targetgroup.Group) {
|
func (e *Endpoints) addServiceLabels(ns, name string, tg *targetgroup.Group) {
|
||||||
svc := &apiv1.Service{}
|
obj, exists, err := e.serviceStore.GetByKey(namespacedName(ns, name))
|
||||||
svc.Namespace = ns
|
|
||||||
svc.Name = name
|
|
||||||
|
|
||||||
obj, exists, err := e.serviceStore.Get(svc)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logger.Error("retrieving service failed", "err", err)
|
e.logger.Error("retrieving service failed", "err", err)
|
||||||
return
|
return
|
||||||
|
@ -485,7 +475,7 @@ func (e *Endpoints) addServiceLabels(ns, name string, tg *targetgroup.Group) {
|
||||||
if !exists {
|
if !exists {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
svc = obj.(*apiv1.Service)
|
svc := obj.(*apiv1.Service)
|
||||||
|
|
||||||
tg.Labels = tg.Labels.Merge(serviceLabels(svc))
|
tg.Labels = tg.Labels.Merge(serviceLabels(svc))
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,12 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/prometheus/common/model"
|
"github.com/prometheus/common/model"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
"github.com/prometheus/prometheus/discovery/targetgroup"
|
"github.com/prometheus/prometheus/discovery/targetgroup"
|
||||||
)
|
)
|
||||||
|
@ -1257,3 +1259,22 @@ func TestEndpointsDiscoverySidecarContainer(t *testing.T) {
|
||||||
},
|
},
|
||||||
}.Run(t)
|
}.Run(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkResolvePodRef(b *testing.B) {
|
||||||
|
indexer := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, nil)
|
||||||
|
e := &Endpoints{
|
||||||
|
podStore: indexer,
|
||||||
|
}
|
||||||
|
|
||||||
|
b.ReportAllocs()
|
||||||
|
b.ResetTimer()
|
||||||
|
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
p := e.resolvePodRef(&v1.ObjectReference{
|
||||||
|
Kind: "Pod",
|
||||||
|
Name: "testpod",
|
||||||
|
Namespace: "foo",
|
||||||
|
})
|
||||||
|
require.Nil(b, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -467,11 +467,8 @@ func (e *EndpointSlice) resolvePodRef(ref *apiv1.ObjectReference) *apiv1.Pod {
|
||||||
if ref == nil || ref.Kind != "Pod" {
|
if ref == nil || ref.Kind != "Pod" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
p := &apiv1.Pod{}
|
|
||||||
p.Namespace = ref.Namespace
|
|
||||||
p.Name = ref.Name
|
|
||||||
|
|
||||||
obj, exists, err := e.podStore.Get(p)
|
obj, exists, err := e.podStore.GetByKey(namespacedName(ref.Namespace, ref.Name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logger.Error("resolving pod ref failed", "err", err)
|
e.logger.Error("resolving pod ref failed", "err", err)
|
||||||
return nil
|
return nil
|
||||||
|
@ -484,19 +481,19 @@ func (e *EndpointSlice) resolvePodRef(ref *apiv1.ObjectReference) *apiv1.Pod {
|
||||||
|
|
||||||
func (e *EndpointSlice) addServiceLabels(esa endpointSliceAdaptor, tg *targetgroup.Group) {
|
func (e *EndpointSlice) addServiceLabels(esa endpointSliceAdaptor, tg *targetgroup.Group) {
|
||||||
var (
|
var (
|
||||||
svc = &apiv1.Service{}
|
|
||||||
found bool
|
found bool
|
||||||
|
name string
|
||||||
)
|
)
|
||||||
svc.Namespace = esa.namespace()
|
ns := esa.namespace()
|
||||||
|
|
||||||
// Every EndpointSlice object has the Service they belong to in the
|
// Every EndpointSlice object has the Service they belong to in the
|
||||||
// kubernetes.io/service-name label.
|
// kubernetes.io/service-name label.
|
||||||
svc.Name, found = esa.labels()[esa.labelServiceName()]
|
name, found = esa.labels()[esa.labelServiceName()]
|
||||||
if !found {
|
if !found {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
obj, exists, err := e.serviceStore.Get(svc)
|
obj, exists, err := e.serviceStore.GetByKey(namespacedName(ns, name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e.logger.Error("retrieving service failed", "err", err)
|
e.logger.Error("retrieving service failed", "err", err)
|
||||||
return
|
return
|
||||||
|
@ -504,7 +501,7 @@ func (e *EndpointSlice) addServiceLabels(esa endpointSliceAdaptor, tg *targetgro
|
||||||
if !exists {
|
if !exists {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
svc = obj.(*apiv1.Service)
|
svc := obj.(*apiv1.Service)
|
||||||
|
|
||||||
tg.Labels = tg.Labels.Merge(serviceLabels(svc))
|
tg.Labels = tg.Labels.Merge(serviceLabels(svc))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue