diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index 1576a90a2c6..80c226f5e02 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -112,6 +112,9 @@ func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys util.StringSe podBackoff := podBackoff{ perPodBackoff: map[string]*backoffEntry{}, clock: realClock{}, + + defaultDuration: 1 * time.Second, + maxDuration: 60 * time.Second, } return &scheduler.Config{ @@ -245,9 +248,11 @@ type backoffEntry struct { } type podBackoff struct { - perPodBackoff map[string]*backoffEntry - lock sync.Mutex - clock clock + perPodBackoff map[string]*backoffEntry + lock sync.Mutex + clock clock + defaultDuration time.Duration + maxDuration time.Duration } func (p *podBackoff) getEntry(podID string) *backoffEntry { @@ -255,7 +260,7 @@ func (p *podBackoff) getEntry(podID string) *backoffEntry { defer p.lock.Unlock() entry, ok := p.perPodBackoff[podID] if !ok { - entry = &backoffEntry{backoff: 1 * time.Second} + entry = &backoffEntry{backoff: p.defaultDuration} p.perPodBackoff[podID] = entry } entry.lastUpdate = p.clock.Now() @@ -266,8 +271,8 @@ func (p *podBackoff) getBackoff(podID string) time.Duration { entry := p.getEntry(podID) duration := entry.backoff entry.backoff *= 2 - if entry.backoff > 60*time.Second { - entry.backoff = 60 * time.Second + if entry.backoff > p.maxDuration { + entry.backoff = p.maxDuration } glog.V(4).Infof("Backing off %s for pod %s", duration.String(), podID) return duration @@ -282,7 +287,7 @@ func (p *podBackoff) gc() { defer p.lock.Unlock() now := p.clock.Now() for podID, entry := range p.perPodBackoff { - if now.Sub(entry.lastUpdate) > 60*time.Second { + if now.Sub(entry.lastUpdate) > p.maxDuration { delete(p.perPodBackoff, podID) } } diff --git a/plugin/pkg/scheduler/factory/factory_test.go b/plugin/pkg/scheduler/factory/factory_test.go index 6e3d30d75b5..8e9b7c1ecd9 100644 --- a/plugin/pkg/scheduler/factory/factory_test.go +++ b/plugin/pkg/scheduler/factory/factory_test.go @@ -118,8 +118,10 @@ func TestDefaultErrorFunc(t *testing.T) { factory := NewConfigFactory(client.NewOrDie(&client.Config{Host: server.URL, Version: testapi.Version()})) queue := cache.NewFIFO() podBackoff := podBackoff{ - perPodBackoff: map[string]*backoffEntry{}, - clock: &fakeClock{}, + perPodBackoff: map[string]*backoffEntry{}, + clock: &fakeClock{}, + defaultDuration: 1 * time.Millisecond, + maxDuration: 1 * time.Second, } errFunc := factory.makeDefaultErrorFunc(&podBackoff, queue) @@ -203,8 +205,10 @@ func TestBind(t *testing.T) { func TestBackoff(t *testing.T) { clock := fakeClock{} backoff := podBackoff{ - perPodBackoff: map[string]*backoffEntry{}, - clock: &clock, + perPodBackoff: map[string]*backoffEntry{}, + clock: &clock, + defaultDuration: 1 * time.Second, + maxDuration: 60 * time.Second, } tests := []struct {