Skip to content

Commit

Permalink
Fix GlobalQPSLoad
Browse files Browse the repository at this point in the history
  • Loading branch information
mborsz committed Dec 19, 2019
1 parent 182c228 commit f60d942
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
23 changes: 22 additions & 1 deletion clusterloader2/pkg/tuningset/global_qps_load.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,39 @@ package tuningset

import (
"context"
"sync"

"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/perf-tests/clusterloader2/api"

"golang.org/x/time/rate"
)

type globalQPSLoadFactory struct {
existing map[string]*globalQPSLoad
lock sync.Mutex
}

func newGlobalQPSLoadFactory() *globalQPSLoadFactory {
return &globalQPSLoadFactory{existing: make(map[string]*globalQPSLoad), lock: sync.Mutex{}}
}

func (f *globalQPSLoadFactory) GetOrCreate(name string, params *api.GlobalQPSLoad) *globalQPSLoad {
f.lock.Lock()
defer f.lock.Unlock()
qps, ok := f.existing[name]
if !ok {
qps = newGlobalQPSLoad(params)
f.existing[name] = qps
}
return qps
}

type globalQPSLoad struct {
limiter *rate.Limiter
}

func newGlobalQPSLoad(params *api.GlobalQPSLoad) TuningSet {
func newGlobalQPSLoad(params *api.GlobalQPSLoad) *globalQPSLoad {
return &globalQPSLoad{
limiter: rate.NewLimiter(rate.Limit(params.QPS), params.Burst),
}
Expand Down
8 changes: 5 additions & 3 deletions clusterloader2/pkg/tuningset/simple_tuning_set_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@ import (
)

type simpleTuningSetFactory struct {
tuningSetMap map[string]*api.TuningSet
tuningSetMap map[string]*api.TuningSet
globalQPSLoadFactory *globalQPSLoadFactory
}

// NewTuningSetFactory creates new ticker factory.
func NewTuningSetFactory() TuningSetFactory {
return &simpleTuningSetFactory{
tuningSetMap: make(map[string]*api.TuningSet),
tuningSetMap: make(map[string]*api.TuningSet),
globalQPSLoadFactory: newGlobalQPSLoadFactory(),
}
}

Expand Down Expand Up @@ -61,7 +63,7 @@ func (tf *simpleTuningSetFactory) CreateTuningSet(name string) (TuningSet, error
case tuningSet.ParallelismLimitedLoad != nil:
return newParallelismLimitedLoad(tuningSet.ParallelismLimitedLoad), nil
case tuningSet.GlobalQPSLoad != nil:
return newGlobalQPSLoad(tuningSet.GlobalQPSLoad), nil
return tf.globalQPSLoadFactory.GetOrCreate(name, tuningSet.GlobalQPSLoad), nil
default:
return nil, fmt.Errorf("incorrect tuning set: %v", tuningSet)
}
Expand Down

0 comments on commit f60d942

Please sign in to comment.