mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2025-07-13 10:20:20 +00:00
Merge pull request #295 from adutchak-x/bugfix/fix-disregard-incompatible-hpas-error-handling
Bugfix/fix disregard incompatible hpas error handling
This commit is contained in:
@ -61,6 +61,11 @@ func (p *PluginNotFoundError) Error() string {
|
||||
return fmt.Sprintf("no plugin found for %s", p.metricTypeName)
|
||||
}
|
||||
|
||||
func (p *PluginNotFoundError) Is(target error) bool {
|
||||
_, ok := target.(*PluginNotFoundError)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (c *CollectorFactory) RegisterPodsCollector(metricCollector string, plugin CollectorPlugin) error {
|
||||
if metricCollector == "" {
|
||||
c.podsPlugins.Any = plugin
|
||||
|
@ -11,8 +11,6 @@ import (
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/recorder"
|
||||
autoscalingv2 "k8s.io/api/autoscaling/v2beta2"
|
||||
apiv1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@ -22,6 +20,9 @@ import (
|
||||
kube_record "k8s.io/client-go/tools/record"
|
||||
"k8s.io/metrics/pkg/apis/custom_metrics"
|
||||
"k8s.io/metrics/pkg/apis/external_metrics"
|
||||
|
||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/recorder"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -196,6 +197,7 @@ func (p *HPAProvider) updateHPAs() error {
|
||||
|
||||
p.logger.Infof("Found %d new/updated HPA(s)", newHPAs)
|
||||
p.hpaCache = newHPACache
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package provider
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -10,6 +11,7 @@ import (
|
||||
autoscaling "k8s.io/api/autoscaling/v2beta2"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
)
|
||||
|
||||
@ -29,6 +31,33 @@ func (c mockCollector) Interval() time.Duration {
|
||||
return 1 * time.Second
|
||||
}
|
||||
|
||||
type event struct {
|
||||
Object runtime.Object
|
||||
EventType string
|
||||
Reason string
|
||||
Message string
|
||||
}
|
||||
|
||||
type mockEventRecorder struct {
|
||||
Events []event
|
||||
}
|
||||
|
||||
func (r *mockEventRecorder) Event(object runtime.Object, eventtype, reason, message string) {
|
||||
r.Events = append(r.Events, event{
|
||||
Object: object,
|
||||
EventType: eventtype,
|
||||
Reason: reason,
|
||||
Message: message,
|
||||
})
|
||||
}
|
||||
|
||||
func (r *mockEventRecorder) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) {
|
||||
r.Event(object, eventtype, reason, fmt.Sprintf(messageFmt, args...))
|
||||
}
|
||||
|
||||
func (r *mockEventRecorder) AnnotatedEventf(object runtime.Object, annotations map[string]string, eventtype, reason, messageFmt string, args ...interface{}) {
|
||||
}
|
||||
|
||||
func TestUpdateHPAs(t *testing.T) {
|
||||
value := resource.MustParse("1k")
|
||||
|
||||
@ -141,9 +170,26 @@ func TestUpdateHPAsDisregardingIncompatibleHPA(t *testing.T) {
|
||||
err = collectorFactory.RegisterPodsCollector("", mockCollectorPlugin{})
|
||||
require.NoError(t, err)
|
||||
|
||||
eventRecorder := &mockEventRecorder{}
|
||||
provider := NewHPAProvider(fakeClient, 1*time.Second, 1*time.Second, collectorFactory, true)
|
||||
provider.recorder = eventRecorder
|
||||
provider.collectorScheduler = NewCollectorScheduler(context.Background(), provider.metricSink)
|
||||
|
||||
err = provider.updateHPAs()
|
||||
require.NoError(t, err)
|
||||
|
||||
// we don't expect any events if disregardIncompatibleHPAs=true
|
||||
require.Len(t, eventRecorder.Events, 0)
|
||||
|
||||
// check for events when disregardIncompatibleHPAs=false
|
||||
eventRecorder = &mockEventRecorder{}
|
||||
provider = NewHPAProvider(fakeClient, 1*time.Second, 1*time.Second, collectorFactory, false)
|
||||
provider.recorder = eventRecorder
|
||||
provider.collectorScheduler = NewCollectorScheduler(context.Background(), provider.metricSink)
|
||||
|
||||
err = provider.updateHPAs()
|
||||
require.NoError(t, err)
|
||||
|
||||
// we expect an event when disregardIncompatibleHPAs=false
|
||||
require.Len(t, eventRecorder.Events, 1)
|
||||
}
|
||||
|
Reference in New Issue
Block a user